Ich kann nicht sehen, wie man ein JPanel mit SpringLayout richtig berechnen seine bevorzugte Größe, wie es derzeit immer (0, 0) ist. Ich habe versucht, panel.setPreferredSize(layout.preferredLayoutSize(panel));
zu nennen, aber es ändert nichts. Ich habe auch versucht, Constraints (im folgenden Code auskommentiert) an der Süd- und Ostseite des Panels im Vergleich zu Komponenten, die am weitesten südlich/östlich liegen, zu erstellen. Während ich anfange, mir die bevorzugte Größe zu geben, wird die GUI bei der Größenänderung von JFrame total durcheinander gebracht. zB verschieben sich einige Komponenten aus der Sicht, überlappen sich gegenseitig usw.).JPanel mit SpringLayout preferredSize berechnet nicht den richtigen Wert
Dies ist die Klasse, die mir Fragen schenkt:
public class TileView extends JPanel {
private TilesController controller;
private JRadioButton paint, select;
private JPanel prototype_panel, selection_panel;
public TileView (TilesController tiles_controller) {
controller = tiles_controller;
SpringLayout layout = new SpringLayout();
setLayout(layout);
prototype_panel = new TileBrushPanel(controller);
selection_panel = new TileSelectionPanel(controller);
paint = new JRadioButton("draw");
paint.addActionListener(l -> controller.setPaintTileMode());
select = new JRadioButton ("select");
select.addActionListener(l -> controller.setSelectMode());
ButtonGroup bGroup = new ButtonGroup();
bGroup.add(paint);
bGroup.add(select);
layout.putConstraint(NORTH, paint, 4, NORTH, this);
layout.putConstraint(WEST, paint, 4, WEST, this);
add (paint);
layout.putConstraint(NORTH, select, 0, NORTH, paint);
layout.putConstraint(WEST, select, 4, EAST, paint);
add (select);
layout.putConstraint(NORTH, prototype_panel, 4, NORTH, paint);
layout.putConstraint(WEST, prototype_panel, 4, WEST, this);
add (prototype_panel);
layout.putConstraint(NORTH, selection_panel, 0, NORTH, prototype_panel);
layout.putConstraint(WEST, selection_panel, 4, EAST, prototype_panel);
add (selection_panel);
//layout.putConstraint(SOUTH, this, 4, SOUTH, prototype_panel);
//layout.putConstraint(EAST, this, 0, EAST, selection_panel);
setPreferredSize(layout.preferredLayoutSize(this));
}
}
Was passiert, wenn Sie 'validate()' die Komponente oder 'pack()' das umschließende Fenster? – trashgod
1) Für bessere Hilfe, früher, ein [MCVE] oder [kurze, selbständige, korrekte Beispiel] (http://www.sscce.org/). 2) Siehe [Sollte ich die Verwendung der festgelegten Methoden (Preferred | Maximum | Minimum) in Java Swing vermeiden?] (Http://stackoverflow.com/q/7229226/418556) (Ja.) –