Java BorderLayout:设置为EAST和WEST的JComponents出现在JFrame之外

时间:2017-05-05 18:59:55

标签: java

我有使用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之外: enter image description here

您可以在上图中看到2乘6 JFrame,但EAST和WEST区域中的两个红色块不可见。

我四处搜寻,发现我认为this post与我的问题有关。我在最外面的BorderLayout的EAST和WEST位置添加了两个GridLayout个刚性区域,结果得到了这个: enter image description here

所以现在最外面的BorderLayout的CENTER区域两侧都有垫片,但是这两个红色块仍然出现在那些垫片的外面

我尝试用BoardPanel的Box代替1乘3 BorderLayout,我有点接近我的期望: enter image description here

但现在每列的大小都是相同的,这是不可接受的。似乎解决方法是使用GridLayout,但这看起来非常复杂,并且想要在GridBagLayout中调整列大小的问题的大部分解决方案只是使用GridLayout来代替

这是Pit类代码:

BorderLayout

1 个答案:

答案 0 :(得分:0)

感谢VGR提供了在Pit类中覆盖getPreferredSize()的答案。