如何在Java中制作这个3列拆分器?

如何在Java中制作这个3列拆分器?,java,swing,layout,layout-manager,miglayout,Java,Swing,Layout,Layout Manager,Miglayout,我正在使用Java和MiGLayout尝试重新创建此布局: 比如说: 每个列都需要调整大小 调整主窗口大小时,左右列的大小保持不变 中间列填充所有可用空间,并在调整大小时更改大小 换句话说,左侧和右侧面板需要“粘贴”到窗口的左侧和右侧,但也可以调整大小(并且在调整大小时不会按比例更改) 我试过很多方法,但调整尺寸总是个问题。下面是当前的代码,它试图用嵌套的JSplitPane实现这一点 public class MainGUI extends JFrame { private St

我正在使用Java和MiGLayout尝试重新创建此布局:

比如说:

  • 每个列都需要调整大小
  • 调整主窗口大小时,左右列的大小保持不变
  • 中间列填充所有可用空间,并在调整大小时更改大小
换句话说,左侧和右侧面板需要“粘贴”到窗口的左侧和右侧,但也可以调整大小(并且在调整大小时不会按比例更改)

我试过很多方法,但调整尺寸总是个问题。下面是当前的代码,它试图用嵌套的JSplitPane实现这一点

public class MainGUI extends JFrame {
    private String app_name = "Layout Test";
    private int window_x_min = 700;
    private int window_y_min = 450;

    public MainGUI() {
        setTitle(app_name);
        setSize(window_x_min + 200, window_y_min + 100);
        setMinimumSize(new Dimension(window_x_min, window_y_min));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel();
        this.setContentPane(panel);
        panel.setLayout(new MigLayout("","[]","[grow]"));
        JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        splitpane.setContinuousLayout(true);

        splitpane.setTopComponent(new JButton("middle"));
        splitpane.setBottomComponent(new JButton("right"));

        JSplitPane splitpane2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        splitpane2.setContinuousLayout(true);
        splitpane.setDividerLocation(450);

        splitpane2.setBottomComponent(splitpane);
        splitpane2.setTopComponent(new JButton("left"));

        panel.add(splitpane2, "push, grow");

        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
我已经设法让它以我喜欢的方式开始加载,但是有以下问题:

  • 从右侧调整大小会更改“右侧”面板的大小,而不是中间面板的大小
  • 从左侧调整大小也会更改“右侧”面板的大小

看起来应用程序的左侧正在运行,我需要右侧以相同的方式运行。希望我说的有道理,谢谢

调整拆分窗格的大小时,您需要管理空间的分配方式。这是通过使用
setResizeWeight()
方法完成的。默认情况下,该值为0.0f,这意味着“左”组件是固定的。因此,您需要在其中一个拆分窗格上操作此属性。有关此属性如何工作的详细信息,请阅读API

我不使用MigLayout,但使用标准的BorderLayout做一个简单的测试,您需要添加的是:

splitpane.setResizeWeight(1.0f);

另外,在发布代码时,不要忘记包含main()方法,这样我们就可以复制/粘贴/执行代码。我们不需要做任何额外的工作。

谢谢!我很抱歉没有使用主方法。这是一个简单的解决办法,我很感谢你的帮助。