在 Swing 中,使 JSplitPane 拆分两个 jpanel 的最佳方法是每个 50% 的大小。
看起来如果我没有在面板上设置首选尺寸,它总是使第一个面板几乎不可见(2%)和第二个面板(98%)
提前致谢
在 Swing 中,使 JSplitPane 拆分两个 jpanel 的最佳方法是每个 50% 的大小。
看起来如果我没有在面板上设置首选尺寸,它总是使第一个面板几乎不可见(2%)和第二个面板(98%)
提前致谢
您应该使用setDividerLocation(double proportionalLocation)
来确定 的初始空间分布,JSplitPane
然后setResizeWeight(double)
使用相同的值调用以确保窗格按比例调整大小。
另外,请注意:在可见setDividerLocation(double)
之前调用将无法正常工作,因为空间计算是基于的当前大小。相反,您需要涉及一个讨厌的 hack,例如覆盖包含以下内容的 's paint 方法:JSplitPane
Component
JPanel
JSplitPane
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 初始化为 true 并将其添加到父容器构造函数中:
addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e) {
if(firstResize){
splitPane.setDividerLocation(0.5);
firstResize = false;
}
}
});
这应该会导致第一次设置父容器大小时分隔线居中。
这里的解决方案没有考虑用户移动分隔线的情况(即可变分隔线位置)。此处提供了考虑到这一点的完整示例: