Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Oberflächen dynamisch gestalten

Empfohlene Antworten

Veröffentlicht

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

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 ...

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.

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ß.

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.

<!-- -->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!

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

Exzellent.

Darüber kann man vortrefflich streiten ;-)

Darüber kann man vortrefflich streiten ;-)
Und wie man das kann *g*.

Allerdings bleibe ich bei der Meinung, dass in den seltensten Fällen die verwendete Technik bei der Oberflächenerstellung das Problem darstellt.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.