我有使用JFrame
扩展BorderLayout
的类BoardView,该布局的CENTER
字段是一个扩展JPanel
并使用BorderLayout
的类BoardPanel也。此CENTER
的{{1}}字段使用JPanel
。
这是我的BoardPanel代码:
GridLayout
问题在于,当我将BoardPanel的public class BoardPanel extends JPanel {
private ArrayList<Pit> pits;
private JPanel pitGrid;
public BoardPanel() {
super(new BorderLayout());
pitGrid = new JPanel(new GridLayout(2, 6));
pits = new ArrayList<Pit>();
}
public void initializeBoard(StyleStrategy s) {
Pit mancalaA = new Pit(s, true);
Pit mancalaB = new Pit(s, true);
this.add(mancalaA, BorderLayout.WEST);
this.add(mancalaB, BorderLayout.EAST);
this.add(pitGrid, BorderLayout.CENTER);
for (int i=0; i < 12; i++) {
Pit pit = new Pit(s, false);
pitGrid.add(pit);
}
}
}
和EAST
字段设置为WEST
时,这些组件会出现在JComponent
之外:
您可以在上图中看到2乘6 JFrame
,但EAST和WEST区域中的两个红色块不可见。
我四处搜寻,发现我认为this post与我的问题有关。我在最外面的BorderLayout的EAST和WEST位置添加了两个GridLayout
个刚性区域,结果得到了这个:
所以现在最外面的BorderLayout的CENTER区域两侧都有垫片,但是这两个红色块仍然出现在那些垫片的外面。
我尝试用BoardPanel的Box
代替1乘3 BorderLayout
,我有点接近我的期望:
但现在每列的大小都是相同的,这是不可接受的。似乎解决方法是使用GridLayout
,但这看起来非常复杂,并且想要在GridBagLayout
中调整列大小的问题的大部分解决方案只是使用GridLayout
来代替
这是Pit类代码:
BorderLayout
答案 0 :(得分:0)
感谢VGR提供了在Pit类中覆盖getPreferredSize()
的答案。