Swing Anchors wie in Delphi?

Status
Nicht offen für weitere Antworten.

Streeber

Aktives Mitglied
Hallo.

Ich benutze den VEP-Visual Editor um Swing zu benutzen. Nun würde ich gerne einen Button (als Beispiel) so ausrichten, dass er konstant 10px Abstand zum rechten Rand und 10px zum unteren Rand des Festers hat.
Wie lässt sich so etwas in Java einrichten?

Wäre schön wenn mir jemand diese beiden Möglichkeiten erklären könnte:
1. Der Button soll sowohl nach links als auch nach rechts zum Festerrand den gleichen Abstand haben. Die Buttongröße verändert sich somit also wenn sich die Festergröße ändert.
2. Der Button soll eine fixe Breite und einen fixen Abstand zum rechten Fensterrand haben. Der Abstand zum linken Fensterrand verändert sich somit.

Danke für Infos!
 

KrokoDiehl

Top Contributor
Tja... es kommt auf das umgebende Layout drauf an. Aber ich gehe mal vom klassischen BorderLayout deines Fensters aus.
Dann gehört für 1) dein Button ins
Code:
BorderLayout.SOUTH
mit den von Verjigorm genannten Insets (Abstände).
Bei 2) würde sowas passen:
Java:
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.setInsets( ... );
buttonPanel.add(myButton);

window.add(buttonPanel, BorderLayout.SOUTH);
 

Streeber

Aktives Mitglied
Sorry, aber irgendwie krieg ich's nicht hin.

Beispiel 1:

Java:
jButton = new JButton();
jButton.setText("test");
Insets insets = new java.awt.Insets( 0, 0, 0, 0 ); // irgendwo im Netz gefunden :-/ Wie verwende ich das?
jButton.insets().set(20,50,100,3); // Eclipse sagt: "The method insets() from the type Container is deprecated" ???

jContentPane.add(jButton, java.awt.BorderLayout.SOUTH);

Wäre schön, wenn mir jemand ein Code-Beispiel geben könnte. Habe noch kaum Ahnung von Swing.

Danke!
 

Verjigorm

Top Contributor
Wie wäre es, mal die API durchzulesen?
Am einfachsten, hier im Forum bei deinem Codebeispiel auf "Insets" klicken ;)

Constructor Summary
Insets(int top, int left, int bottom, int right)
Creates and initializes a new Insets object with the specified top, left, bottom, and right insets.

könnte schonmal helfen oder?
 

KrokoDiehl

Top Contributor
Ok, grad gesehen dass JButton gar keine Methode hat um die Insets zu setzen. Ok, es gibt
Code:
setMargin(Insets)
, aber das hat nicht den Effekt, den du willst :)

Um also 1) zu erreichen, bräuchtest du sowas (gibt sicher auch Alternativen):
Java:
jButton = new JButton("Test");

JPanel buttonPanel = new JPanel(new BorderLayout(0, 0));
buttonPanel.setBorder(new EmptyBorder(oben, links, unten, rechts));
buttonPanel.add(jButton, BorderLayout.CENTER); //damit der Button den ganzen Platz einnnimmt

jContentPane.add(buttonPanel, BorderLayout.SOUTH);
Die Angaben oben, links, unten und rechts sind ints mit deinem gewünschten Pixelabstand.
 

Streeber

Aktives Mitglied
Vielen Dank. Somit habe ich Nummer 1 schon mal hinbekommen :)

Problem bei 2:
"The method setinsets() is undefined for the type JPanel"
Sieht so aus, als ob JPanel auch keine Funktion hat um die Insets zu setzen, oder?
Ich hab's genauso geschrieben wie du oben und Insets importiert.

Bin für Hilfe dankbar. Gruß

// edit:
Hab's doch noch hinbekommen:
Ein JPanel mit BorderLayout.EAST setzen und anschließend dem Button BorderLayout.SOUTH zuteilen.

Nochmals danke KrokoDiehl!
 
Zuletzt bearbeitet:

Streeber

Aktives Mitglied
Noch eine ähnliche Frage:
Kann man das auch mit einem GridLayout realisieren?
Also dass man z.B. sagt, die rechte Spalte soll fixe Breite haben und am rechten Rand kleben. Die linke Spalte ebenfalls fixe Breite und am linken Rand. Und die untere Zeilen soll fix am unteren Rand kleben.
Geht sowas?

Weil im Moment stehen mir ja nur NORTH, EAST, SOUTH, WEST und CENTER zur Verfügung.

Danke für Infos.
 

Verjigorm

Top Contributor
GridbagLayout ist sehr mächtig, aber dementsprechend auch eins der "schwierigsten" Layouts für Anfänger.

PS: Man kann Layouts auch verschachteln
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben