我正在使用java和miglayout尝试重新创建此布局:
http://www.methvin.com/splitter/3csplitter.html
比如说:
每列都需要调整大小
调整主窗口大小时,左右列的大小保持相同
中间列填充所有可用空间,并在调整大小时更改大小
换句话说,左右面板需要“粘”在窗口的左右两侧,但也可以调整大小(调整大小时不按比例改变)
我试过很多方法,但调整尺寸总是个问题。下面是当前的代码,它试图用嵌套的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);
}
}
我已经设法让它加载到最初我喜欢的方式,但有以下问题:
从右侧调整大小将更改“右侧”面板的大小,而不是中间面板的大小
从左侧调整大小也会更改“右侧”面板的大小
看来,左侧的应用程序正在工作,我需要右侧的功能相同。希望我说的有道理,谢谢!
1条答案
按热度按时间gev0vcfq1#
调整拆分窗格的大小时,需要管理如何分配空间。这是通过使用
setResizeWeight()
方法。默认情况下,该值为0.0f,这意味着“left”分量是固定的。所以您需要在一个拆分窗格上操作这个属性。有关此属性如何工作的详细信息,请阅读api。我不使用miglayout,但是使用标准borderlayout做一个简单的测试,您需要添加的是:
另外,在发布sscce时,不要忘记包含main()方法,这样我们就可以复制/粘贴/执行代码。我们不需要做任何额外的工作。