JSplitPane精确分裂50%

时间:2010-02-22 14:27:41

标签: java swing jcomponent

在秋千中, 什么是使JSplitPane分割两个jpanels的最佳方法,每个jpanels的大小分别为50%。

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

提前致谢

4 个答案:

答案 0 :(得分:29)

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

此外,请注意:在setDividerLocation(double)可见之前调用JSplitPane 将无法正常运行,因为空间计算基于Component目前的规模。相反,你需要涉及一个讨厌的黑客,例如覆盖包含JPanel的{​​{1}}的绘制方法:

JSplitPane

答案 1 :(得分:26)

使用

setResizeWeight (.5d);

  

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:0)

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

How do you get JSplitPane to keep the same proportional location if the user has moved the location of the divider