JSplitPane精确分裂50%

在Swing中,最好的方法是让JSplitPane分割两个jpanel,每个jpanel的大小为50%。

看起来如果我没有在面板上设置首选尺寸,它总是使第一个面板几乎不可见(2%),第二个面板几乎不可见(98%)

提前致谢

使用

setResizeWeight (.5d);

[…]值0,默认值,表示右/底组件获取所有额外空间(左/顶组件固定),其中值为1指定左/顶组件获取所有额外空间(右/底部分行为固定)。 […]

您应该使用setDividerLocation(double proportionalLocation)来确定JSplitPane初始空间分布 ,然后使用相同的值调用setResizeWeight(double)以确保按比例调整窗格的大小。

另外,请注意:在JSplitPane可见之前调用setDividerLocation(double) 将无法正常工作 ,因为空间计算基于Component的当前大小。 相反,你需要涉及一个讨厌的黑客,例如覆盖包含JSplitPaneJPanel的paint方法:

 private boolean painted; @Override public void paint(Graphics g) { super.paint(g); if (!painted) { painted = true; splitPane.setDividerLocation(0.25); } } 

我遇到了类似的问题,我通过在父容器中使用组件侦听器并在第一次resize时设置分隔符位置来解决它。 将变量firstResize初始化为true并将其添加到父容器构造函数中:

 addComponentListener(new ComponentAdapter(){ @Override public void componentResized(ComponentEvent e) { if(firstResize){ splitPane.setDividerLocation(0.5); firstResize = false; } } }); 

这应该会在首次设置父容器大小时使分隔符居中。

这里的解决方案没有考虑用户移动分隔器的情况(即可变分频器位置)。 此处提供了一个将此考虑在内的完整示例:

如果用户移动了分隔符的位置,如何让JSplitPane保持相同的比例位置