2010-02-22 43 views
20

在Swing中, 什么做出调整JSplitPane到分体式两种jpanels用50%大小的每个的最佳途径。分裂JSplitPane的50%正是

它看起来像如果我不在面板上设置的优选尺寸它总是让第一面板几乎看不见(2%),第二个(98%)

预先感谢

回答

24

使用

setResizeWeight(.5d);

[...]的0时,默认情况下,这个值表示右/底部组件获得所有的额外空间(左/顶componen t的行为是固定的),其中值为1指定左/顶部组件获得所有额外空间(右/底部组件动作固定)。 [...]

+5

setResizeWeight(双)仅用于“分配额外空间当分隔窗格的大小改变”。它不确定最初的空间分布。 – Adamski 2010-02-22 15:42:26

27

您应该使用setDividerLocation(double proportionalLocation)确定JSplitPane初始空间分配,然后调用setResizeWeight(double)具有相同值,以确保窗格中的比例调整。

此外,要知道:在JSplitPane前调用setDividerLocation(double)可见将无法​​正常工作,因为空间计算是基于Component的电流的大小。相反,你需要涉及到一个讨厌的黑客攻击,如覆盖包含JPanel的paint方法JSplitPane

private boolean painted; 

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

    if (!painted) { 
     painted = true; 
     splitPane.setDividerLocation(0.25); 
    } 
} 
+0

+1它工作的很棒!对于下一个人来说,只有一点注意:要注意组件的“最小尺寸”属性。如果最小尺寸大于可用空间更大,调整JSplitPane的第一次抽签将正常工作,但如果调整框架,它将被重新计算。在这种情况下,快速修复:'component.setMinimumSize(new Dimensions(0,0))' – 2013-11-27 09:49:02

4

我也有类似的问题,我解决它通过在父容器组件监听器,并设置第一个调整大小的分隔符位置。初始化变量firstResize为true,并添加到父容器构造这样的:

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

这应导致当父容器的大小是第一组为中心的除法器。