在Swing中,如何最好地使用JSplitPane将两个jpanel拆分为相等的50%大小。
看起来如果我不在面板上设置首选大小,它总是会使第一个面板几乎不可见(2%),而第二个面板则占据了剩余的空间(98%)。
提前致谢。
在Swing中,如何最好地使用JSplitPane将两个jpanel拆分为相等的50%大小。
看起来如果我不在面板上设置首选大小,它总是会使第一个面板几乎不可见(2%),而第二个面板则占据了剩余的空间(98%)。
提前致谢。
你应该使用setDividerLocation(double proportionalLocation)
来确定JSplitPane
的初始空间分配,然后使用相同值调用setResizeWeight(double)
以确保窗格按比例调整大小。
还要注意:在JSplitPane
可见之前调用setDividerLocation(double)
不会正确工作,因为空间计算是基于组件当前的大小。相反,你需要使用一种不好的方法,例如重写包含JSplitPane
的JPanel
的paint方法:
private boolean painted;
@Override
public void paint(Graphics g) {
super.paint(g);
if (!painted) {
painted = true;
splitPane.setDividerLocation(0.25);
}
}
使用
setResizeWeight
(.5d);
[...] 默认值为0,表示右侧/底部组件会占用额外空间(左侧/顶部组件保持不变),而一个值为1则意味着左侧/顶部组件会占用全部的额外空间(右侧/底部组件保持不变)。[...]
我曾经遇到类似的问题,通过在父容器中使用组件监听器并在第一次调整大小时设置分隔位置来解决了它。首先初始化一个名为firstResize的变量,并将其添加到父容器构造函数中:
addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e) {
if(firstResize){
splitPane.setDividerLocation(0.5);
firstResize = false;
}
}
});
当父容器大小首次设置时,这应该使分隔线居中。
component.setMinimumSize(new Dimensions(0,0))
。 - José Ramón