SpringLayoutでJPanelを適切に計算する方法がわかりません。現在は常に(0、0)です。私はpanel.setPreferredSize(layout.preferredLayoutSize(panel));
を呼び出してみましたが、何も変更しません。私はまた、パネル南側と東側に最も南/東のコンポーネントに比較的制約を置いてみました(そして、それが私に適切なサイズを与え始めている間に、JFrameのサイズを変更するとGUIが完全に台無しになります例えば、いくつかの構成要素が視野外にシフトし、互いに重なり合うなど)。JPanelのSpringLayout preferredSizeで正しい値が計算されない
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));
}
}
コンポーネントまたは 'pack()'の囲みウィンドウを 'validate()'するとどうなりますか? – trashgod
1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)「Java Swingでset(Preferred | Maximum | Minimum)Sizeメソッドを使用しないでください。」(http://stackoverflow.com/q/7229226/418556)(はい。 –