在秋千中, 什么是使JSplitPane分割两个jpanels的最佳方法,每个jpanels的大小分别为50%。
看起来如果我没有在面板上设置首选尺寸,它总是使第一个面板几乎不可见(2%),第二个面板(98%)
提前致谢
答案 0 :(得分:29)
您应该使用setDividerLocation(double proportionalLocation)
来确定JSplitPane
的初始空间分布,然后使用相同的值调用setResizeWeight(double)
以确保窗格是按比例调整大小。
此外,请注意:在setDividerLocation(double)
可见之前调用JSplitPane
将无法正常运行,因为空间计算基于Component
目前的规模。相反,你需要涉及一个讨厌的黑客,例如覆盖包含JPanel
的{{1}}的绘制方法:
JSplitPane
答案 1 :(得分:26)
答案 2 :(得分:4)
我遇到了类似的问题,我通过在父容器中使用组件侦听器并在第一次调整大小时设置分隔符位置来解决它。将变量firstResize初始化为true并将其添加到父容器构造函数中:
addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e) {
if(firstResize){
splitPane.setDividerLocation(0.5);
firstResize = false;
}
}
});
这应该会在首次设置父容器大小时使分隔符居中。
答案 3 :(得分:0)
这里的解决方案没有考虑用户移动分频器的情况(即可变分频器位置)。此处提供了一个完整的示例: