Ich habe ja bereits in einem anderen Thread, und zwar in Kurze Layout Frage danach gefragt, welches Layout man benutzen sollte, um einen einzelnen Komponenten mittig in ein Panel zu positionieren (hilfreichste Antwort von L-ectron-X: GridBagLayout).
Grund hierfür war, dass ich schon eine ganze Zeit lang versucht habe, Komponent an exakten Stellen (=Pixeln --> Koordinaten) zu positionieren, die sehr unterschiedlich sein sollen, ohne das NullLayout zu verwenden (Gründe hierfür sind wohl bekannt!). Hauptgrund war, dass ich nach dem Positionieren möchte, dass die Komponenten dennoch auf Größenveränderungen (z.B. bei Frame) reagieren.
Anfangs habe ich dies durch mühsame Berechnungen in der componentResized()-Methode auch erreicht (bie NullLayout). Jedoch ist auch dies eine schlechte Vorgehensweise.
Daher nun mein letzter Stand, um mein Vorhaben umzusetzen: jgoodies FormLayout
Beispiel:
Nun meine Frage an euch: Gibt es bessere Möglichkeiten???
Grund hierfür war, dass ich schon eine ganze Zeit lang versucht habe, Komponent an exakten Stellen (=Pixeln --> Koordinaten) zu positionieren, die sehr unterschiedlich sein sollen, ohne das NullLayout zu verwenden (Gründe hierfür sind wohl bekannt!). Hauptgrund war, dass ich nach dem Positionieren möchte, dass die Komponenten dennoch auf Größenveränderungen (z.B. bei Frame) reagieren.
Anfangs habe ich dies durch mühsame Berechnungen in der componentResized()-Methode auch erreicht (bie NullLayout). Jedoch ist auch dies eine schlechte Vorgehensweise.
Daher nun mein letzter Stand, um mein Vorhaben umzusetzen: jgoodies FormLayout
Beispiel:
Java:
import java.awt.EventQueue;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
public class MyExample1 extends JPanel {
protected JButton btnButton1, btnButton2;
public MyExample1() {
setPreferredSize(new Dimension(500, 350));
setFormLayout(this, 500, 350);
btnButton1 = new JButton("Button 1");
btnButton1.setPreferredSize(new Dimension(180, 25));
add(mittig(btnButton1), "101, 11, 180, 25, fill, fill");
btnButton2 = new JButton("Button 2");
btnButton2.setPreferredSize(new Dimension(160, 75));
add(btnButton2, "301, 41, 160, 75, fill, fill");
}
private JPanel mittig(JComponent comp) {
JPanel panel = new JPanel();
panel.setOpaque(false);
panel.setLayout(new GridBagLayout());
panel.add(comp);
return panel;
}
private void setFormLayout(JPanel panel, int width, int height) {
ColumnSpec[] columnspec = new ColumnSpec[width];
for(int i=0; i<columnspec.length; i++) {
columnspec[i] = ColumnSpec.decode("1px:grow");
}
RowSpec[] rowspec = new RowSpec[height];
for(int i=0; i<rowspec.length; i++) {
rowspec[i] = RowSpec.decode("1px:grow");
}
panel.setLayout(new FormLayout(columnspec, rowspec));
}
private static void createFrame() {
JFrame f = new JFrame("MyExample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new MyExample1());
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
createFrame();
}
});
}
}
Nun meine Frage an euch: Gibt es bessere Möglichkeiten???