2010-02-22 42 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; 
     } 
    } 
}); 

這應導致當父容器的大小是第一組爲中心的除法器。