我看不到如何使用 SpringLayout 制作 JPanel 正确计算其首选大小,因为目前它始终是 (0, 0)。我试过打电话panel.setPreferredSize(layout.preferredLayoutSize(panel));
,但它没有改变任何东西。我还尝试在面板的南侧和东侧放置约束(在下面的代码中注释掉)相对于最南/东的组件,虽然它开始给我正确的首选尺寸,但在调整 JFrame 大小时 GUI 绝对搞砸了(例如,某些组件移出视野、相互重叠等)。
这是给我问题的课程:
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));
}
}