BoxLayout拉伸组件以适合父面板

Aly*_*Aly 20 java user-interface swing

嗨,我正在使用一个BoxLayout堆叠JPanel在彼此的顶部(BoxLayout.Y_AXIS),例如,如果我的父亲JPanel高度为500像素,我添加两个子面板,高度为100像素.在BoxLayout绵延他们,让他们一起占据了500px的空间.有谁知道如何禁用此功能?

cam*_*ckr 23

BoxLayout是少数几个遵循组件最小和最大尺寸的布局管理器之一.因此,如果您想阻止面板伸展,您可以使用:

panel.setMaximumSize( panel.getPreferredSize() );
Run Code Online (Sandbox Code Playgroud)


Asc*_*ian 10

请改用GridBagLayout.您可以更好地控制UI.

但是如果你想仍然使用BoxLayout,并且不希望它们伸展,你可以使用隐形组件填充物检查,如刚性区域,胶水和填充物.

  • 如果投票给我,请提供理由 (4认同)

Arm*_*ndt 5

这似乎工作得很好...根据需要使用BoxLayout。

测试

    this.setLayout(new FlowLayout()); // this being the JFrame

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.setPreferredSize(new Dimension(500, 500));
    panel.setBackground(Color.orange);
    this.add(panel); // add the parent to the JFrame

    JPanel pnlChild1 = new JPanel();
    pnlChild1.setBackground(Color.cyan);
    pnlChild1.setMaximumSize(new Dimension(200, 100));

    JPanel pnlChild2 = new JPanel();
    pnlChild2.setBackground(Color.magenta);
    pnlChild2.setMaximumSize(new Dimension(200, 100));

    panel.add(pnlChild1);
    panel.add(pnlChild2);
Run Code Online (Sandbox Code Playgroud)