如何在 Java 中制作这个 3 列分隔符?
How to make this 3 column splitter in Java?
我正在使用 Java 和 MiGLayout 尝试重新创建此布局:
http://www.methvin.com/splitter/3csplitter.html
所以像这样:
- 每列都需要调整大小
- 调整主栏大小时,左右栏的大小保持不变window
- 中间列填充所有可用的space并在调整大小时改变大小
换句话说,左右面板需要"stick"在window的左右两侧,而且可以调整大小(调整大小时不按比例改变)
我已经尝试了很多东西,但调整大小总是问题。这是当前代码,它尝试使用嵌套的 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);
}
}
我已经设法让它按照我喜欢的方式加载了,但是有以下问题:
- 从右侧调整大小会更改 "right" 面板的大小,而不是中间面板的大小
- 从左侧调整大小也会更改 "right" 面板的大小
应用程序的左侧似乎可以正常工作,我需要右侧以同样的方式运行。希望我说得有道理,谢谢!
您需要管理调整拆分窗格大小时 space 的分配方式。这是通过使用 setResizeWeight()
方法完成的。默认情况下,该值为 0.0f,这意味着 "left" 组件是固定的。因此,您需要在其中一个拆分窗格上操作此 属性。阅读 API 了解有关此 属性 工作原理的更多信息。
我不使用 MigLayout,但使用标准 BorderLayout 进行简单测试,您需要添加的是:
splitpane.setResizeWeight(1.0f);
此外,当您 post SSCCE 时,不要忘记包含 main() 方法,这样我们就可以 copy/paste/execute 代码。我们不需要做任何额外的工作。
我正在使用 Java 和 MiGLayout 尝试重新创建此布局:
http://www.methvin.com/splitter/3csplitter.html
所以像这样:
- 每列都需要调整大小
- 调整主栏大小时,左右栏的大小保持不变window
- 中间列填充所有可用的space并在调整大小时改变大小
换句话说,左右面板需要"stick"在window的左右两侧,而且可以调整大小(调整大小时不按比例改变)
我已经尝试了很多东西,但调整大小总是问题。这是当前代码,它尝试使用嵌套的 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);
}
}
我已经设法让它按照我喜欢的方式加载了,但是有以下问题:
- 从右侧调整大小会更改 "right" 面板的大小,而不是中间面板的大小
- 从左侧调整大小也会更改 "right" 面板的大小
应用程序的左侧似乎可以正常工作,我需要右侧以同样的方式运行。希望我说得有道理,谢谢!
您需要管理调整拆分窗格大小时 space 的分配方式。这是通过使用 setResizeWeight()
方法完成的。默认情况下,该值为 0.0f,这意味着 "left" 组件是固定的。因此,您需要在其中一个拆分窗格上操作此 属性。阅读 API 了解有关此 属性 工作原理的更多信息。
我不使用 MigLayout,但使用标准 BorderLayout 进行简单测试,您需要添加的是:
splitpane.setResizeWeight(1.0f);
此外,当您 post SSCCE 时,不要忘记包含 main() 方法,这样我们就可以 copy/paste/execute 代码。我们不需要做任何额外的工作。