Netbeans, Swing -> Element im Dialog zentrieren
-
^^habs grad ausprobiert: FlowLayout zentriert nur in x-richtung.
-
-fricky- schrieb:
tfa schrieb:
Man sollte es immer vermeiden, keinen Layoutmanager zu verwenden.
wenn man will, dass die components eine feste position haben, dann sollte man besser keinen layoutmanager einsetzen.
Und all Benutzer die eine grössere Schriftart aus der Entwickler verwenden freuen sich über abgeschnittene Texte...
Zur Not kann man dieses Problem auch mit dem GridBagLayout erschlagen (man kann eigentlich alles mit dem GBL erschlagen. Aufmerksames lesen der Doku erleichtert den Einstieg enorm).
-
-fricky- schrieb:
wenn man will, dass die components eine feste position haben, dann sollte man besser keinen layoutmanager einsetzen.
Wenn man will, dass die Anwendung auch mit anderen Display-Einstellungen als den eigenen funktioniert, sollte man das unbedingt vermeiden.
habs grad ausprobiert: FlowLayout zentriert nur in x-richtung.
Dann pack das Flowlayout in den Center-Bereich eines BorderLayout-Panels, oder verwende GridBagLayout oder noch besser ein TableLayout. So schwer ist das nicht, jedenfalls leichter, als sich was mit ComponentListener zurecht zu frickeln.
-
tfa schrieb:
So schwer ist das nicht, jedenfalls leichter, als sich was mit ComponentListener zurecht zu frickeln.
hatte grad etwas lange weile:
package selfmade.button.center; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.JButton; import javax.swing.JFrame; public class Test extends JFrame { JButton button; class Mover extends ComponentAdapter { @Override public void componentResized (ComponentEvent e) { Rectangle re1 = Test.this.getBounds(); Rectangle re2 = button.getBounds(); Insets in = Test.this.getInsets(); button.setLocation ((re1.width-re2.width-in.left-in.right)/2, (re1.height-re2.height-in.top-in.bottom)/2); } } Test() { button = new JButton("hello"); button.setLocation (10, 10); button.setSize(70,20); getContentPane().setLayout(null); getContentPane().add (button); setSize (300,300); setVisible(true); this.addComponentListener(new Mover()); } public static void main(String[] args) { new Test(); } }
mach mal was kürzeres mit layoutmanagern. bin gespannt, vielleicht geht es ja.
-
-fricky- schrieb:
mach mal was kürzeres mit layoutmanagern. bin gespannt, vielleicht geht es ja.
??
import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String... args){ JFrame f = new JFrame(); f.setLayout(new GridBagLayout()); JButton b = new JButton("Hello"); b.setPreferredSize(new Dimension(200, 25)); f.add(b, new GridBagConstraints()); f.pack(); f.setVisible(true); } }
Ist das das kürzer?
-
Wenn du das hier verwendest...
b.setPreferredSize(new Dimension(200, 25));
... kannst du auch gleich auf LayoutManager verzichten, der Button kümmert sich dann nämlich auch nicht mehr um deine Display-Einstellungen :p
Falls du nur den Button strecken willst, "ipadx" ist die richtige Einstellung:
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Main { public static void main(String... args){ JFrame f = new JFrame(); f.setLayout(new GridBagLayout()); JButton b = new JButton("Hello"); GridBagConstraints g = new GridBagConstraints(); g.ipadx = 100; f.add(b, g); f.pack(); f.setVisible(true); } }
-
tfa schrieb:
Ist das das kürzer?
ja, aber der button verändert so seltsam zappelig seine grösse.
JBeni schrieb:
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Main { public static void main(String... args){ JFrame f = new JFrame(); f.setLayout(new GridBagLayout()); JButton b = new JButton("Hello"); GridBagConstraints g = new GridBagConstraints(); g.ipadx = 100; f.add(b, g); f.pack(); f.setVisible(true); } }
fast perfekt. der button erscheint nur etwas breit.
aber ok, ich gestehe, dass eure vorschläge viel besser sind als meiner.
-
Komisch, bei mir zappelt nichts.
Das mit dem ipadx ist natürlich besser.
@OP: Welchen LM verwendest du? Das standard GroupLayout von Matisse? Keine Ahnung ob man damit das Verhalten einfach hinbekommt.
-
Hallo,
also direkt mit dem GUI-Designer geht es also nicht? Dachte so etwas grundlegendes (grundlegendes: meiner Meinung nach) kann der von Haus aus.
Ach extra Code mag ich da jetzt nicht schreiben^^ - dann bleiben die Buttons halt links.Aber trotz alledem vielen Dank!
-
Klar geht das auch mit dem GUI-Designer, du musst halt nur den passenden Layout-Manager auswählen.
-
Hallo,
oh ja stimmt. Ich hab ein Panel ins Panel gesetzt und dort den Button rein getan.
Dort dann das GridBagLayout genommen und nun ist der Button zentriert.Dass man ein anderes Layout setzen kann hatte ich noch gar nicht gesehen. Und dann gibt es für die anderen noch "Customize Layout". Na das eröffnet ja noch viele Möglichkeiten.
Danke!