首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSplitPane拆分精准50%

JSplitPane拆分精准50%
EN

Stack Overflow用户
提问于 2010-02-22 22:27:41
回答 4查看 19.7K关注 0票数 27

在Swing中,让JSplitPane拆分两个大小各为50%的jpanels的最佳方式是什么?

看起来,如果我不设置面板的首选大小,它总是使第一个面板几乎不可见(2%),第二个面板(98%)

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-22 22:35:41

使用

setResizeWeight(.5d);

...默认值0表示右/下组件获得所有额外空间(左/上组件表现为固定),值为1时指定左/上组件获得所有额外空间(右/下组件表现为固定)。...

票数 28
EN

Stack Overflow用户

发布于 2010-02-22 23:45:31

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

另外,请注意:在JSplitPane可见之前调用setDividerLocation(double)将无法正常工作,因为空间计算是基于Component的当前大小进行的。相反,您需要使用一些讨厌的技巧,比如覆盖包含JSplitPaneJPanel的方法。

代码语言:javascript
复制
private boolean painted;

@Override
public void paint(Graphics g) {
    super.paint(g);

    if (!painted) {
        painted = true;
        splitPane.setDividerLocation(0.25);
    }
}
票数 29
EN

Stack Overflow用户

发布于 2013-10-01 00:56:57

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

代码语言:javascript
复制
addComponentListener(new ComponentAdapter(){
    @Override
    public void componentResized(ComponentEvent e) {
        if(firstResize){
            splitPane.setDividerLocation(0.5);
            firstResize = false;
        }
    }
});

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2311449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档