Zum Inhalt springen

Oberflächen dynamisch gestalten


herzchen

Empfohlene Beiträge

Hi,

wie schaut es aus mit Oberflächen in Java. Ich selber habe schon darin programmiert, jedoch hatte ich immer das Problem, dass ich fix angeben musste (bei einem GridLayout), welche Position das Element wie ein Jlabel zum Beispiel, haben soll. Auch vom JFrame die Start-up-Position muss ich mit ".setLocation" fix angeben, da er sonst nicht geladen wird. Welche Alternativen gibt es dazu, nicht jeder hat dieselbe Bildschirmauflösung, das muss doch auch einfacherer gehen, oder?

Gruß

Herzchen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was genau meinst Du jetzt? Mit einem GridBagLayout z. B. muß man die Position nicht "fix" angeben, sondern nur relativ, also in welcher Zelle das Element angezigt werden soll. Und damit bleibst Du auch für alle Auflösungen dynamisch.

Wenn Du allerdings auch die Positionen in der Tabelle dynamisch halten willst, mußt Du wohl einen eigenen LayoutManager schreiben. Vermute ich mal ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

wie schaut es aus mit Oberflächen in Java.
Exzellent.

Ich selber habe schon darin programmiert, jedoch hatte ich immer das Problem, dass ich fix angeben musste (bei einem GridLayout), welche Position das Element wie ein Jlabel zum Beispiel, haben soll.
Dann benutzt du entweder den falschen Layout Manager oder aber du hast eine falsche Vorstellung davon, was "fix" bedeutet.

Natürlich musst du dem Programm auf irgendeine Art und Weise mitteilen, wo dein Label erscheinen soll. Wie soll es auch sonst wissen, wo es positioniert werden soll?

Es unterscheidet sich eben nur die Art und Weise, wie diese Mitteilung erfolgt. Ohne LayoutManager muss ich dediziert sagen "Placiere mir Komponente X and Position 10,10". Mit einem BorderLayout ist es schon einfacher, da sage ich "Positioniere mit Komponente X in der oberen rechten Ecke".

Ohne Zusatzinfos "Dort hin" geht es nicht.

Auch vom JFrame die Start-up-Position muss ich mit ".setLocation" fix angeben, da er sonst nicht geladen wird.
Natürlich - nochmal: Woher soll das System wissen, wo du gerne das neue Fenster geladen haben möchtest? Und selbst wenn es das bei dir wüsste - wer sagt denn, dass es bei mir genauso ist? Es geht nicht ohne Informationen.

Oder anders gefragt: Wie stellst du dir denn das Verhalten vor? Gib mal in Psuedo-Code an, was du von einem - deiner Meinung nach - vernünftigen System erwarten würdest. Wie sollte so ein Aufruf zum Erstellen eines Fenster aussehen?

Welche Alternativen gibt es dazu, nicht jeder hat dieselbe Bildschirmauflösung
Für solche Informationen gibt es beispielsweise Toolkit#getScreenSize() aus der du die aktuelle Auflösung bekommst und entsprechend darauf reagieren kannst.

das muss doch auch einfacherer gehen, oder?
Wie oben schon gesagt: Bring mal ein Beispiel, wie du es dir einfacher vorstellst und wir werden sehen, ob das in allen Einsatzgebieten funktionieren würde.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe -auch nach zweimaligem Lesen- noch nicht so richtig durchblicken können, was jetzt dein eigentliches Problem ist.

Also wenn ich das richtig verstehe, hast du Schwierigkeiten beim Positionieren deiner Komponenten auf deinem Panel. Eine kleine Mitschuld daran trägt offenbar das fehlende Verständnis über den Layoutmanager GridLayout, welchen du nutzt.

An dieser Stelle habe ich ganze 2 Tipps für dich:

Erstens: Lies dich entweder nochmal durch das SUN-Tutorial über GridLayout. (Eigentlich gibt es dort kaum was zu lesen. Ziemlich einfach zu handhaben das GridLayout. Nix anderes als eine schlichte Tabelle...)

Oder Zweitens: Nimm einen anderen Layoutmanager.

Für letzteren Tipp möchte ich dir jgoodies.com ans Herz(chen) legen. Dort gibt es einen sehr guten Layoutmanager, welcher auf den ach so klangvollen Namen Forms hört. (Ist jedenfalls mein persönlicher Favorit.)

Ciao & Gruß.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für letzteren Tipp möchte ich dir jgoodies.com ans Herz(chen) legen. Dort gibt es einen sehr guten Layoutmanager, welcher auf den ach so klangvollen Namen Forms hört. (Ist jedenfalls mein persönlicher Favorit.)

<erbsenzählmodus>

Der LayoutManager heisst FormLayout, das Paket heisst Forms

</erbsenzählmodus>

:)

Aber dem Tip kann ich mich nur anschließen - für mich der beste LayoutManager überhaupt. Ich weiss gar nicht mehr, was ich meinen GUI Applikationen sonst für ein Chaos hätte - schnell zu lernen, einfach zu benutzen und hervorragend in den Ergebnissen.

Hier und da brauch man mal ein Border- oder FlowLayout, aber eigentlich lässt sich alles damit schon erschlagen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

<!-- -->Danke, mir ist schon klar, dass das System nicht erraten kann, wohin ich die Elemente platziert haben möchte. ;)

Das GridLayout - so habe ich es mir damals angelesen - ist ein tabellarisches Layout, was passend eigentlich ist für mein JTable und die Steuerelemente Buttons usw. In den Beispielen bei dpunkt.de sind auch immer nette Bildchen zu den vorherigen Codebeispielen, aber dann hat man eben entweder alles nacheinander platziert, dann habe ich .NORTH .SOUTH und die ganzen Richtung ausprobiert, das war auch alles kein Problem, funktioniert ja auch. Aber man hat eben keine Möglichkeit (so verstehe ich das zumindest) wie in HTML hinzugehen und eine Webseite tabellarisch zu gestalten. Das in Spalte Y, Zelle X ein Button gehört usw. Oder ich wende es einfach falsch an, was ich eher vermute.

Also meine Reihenfolge schaut wie folgt aus:

- Zuerst ein Frame erstellen, damit's nicht zu nackt aussieht:

// TODO Auto-generated method stub

jf.setDefaultCloseOperation(EXIT_ON_CLOSE);

//Titel, Größe und Startposition für Frame festlegen

jf.setTitle("DVD-Verwaltung");

jf.setSize(800,600);

jf.setLocation(250, 250);

Anschließend einen Panel mit scrollpane:

jpanel = new JPanel(new GridLayout(0,1));

jpanel.setBorder(

BorderFactory.createTitledBorder(

BorderFactory.createEtchedBorder(), title));

//jpanel.setLayout(new GridLayout(1,4));

jpanel.add(scrollp);

jpanel.setVisible(true);

Und nen Testbutton:

jbutton.setText(text);

jbutton.setLocation(loc1,loc2);

jbutton.setSize(siz1,siz2);

wobei ich die Elemente in Funktionen einer clsElements-Klasse geschrieben habe und in einer clsMain versuche, die notwendigen Elemente aufzurufen und geeignet zu platzieren.

Das getScreenSize kannte ich zum Beispiel noch nicht, ist wieder ein Ansatz mit dem ich arbeiten kann. Also ich schnupper mal in die Links, Thx!

Link zu diesem Kommentar
Auf anderen Seiten teilen

jpanel = new JPanel(new GridLayout(0,1));

...

jbutton.setText(text);

jbutton.setLocation(loc1,loc2);

jbutton.setSize(siz1,siz2);

So klappt das auch nicht ... Das mußt Du so machen:


 jpanel = new JPanel(new GridLayout(0,1));

...

jbutton.setText(text);

//jbutton.setLocation(loc1,loc2);

jbutton.setSize(siz1,siz2);

jpanel.add(jbutton); //Den Rest übernimmt das GridLayout

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...