JSplitPane分割線固定問題

     最近在作一個OpenSwing的項目,須要將網頁版本變成單機版本,在使用JSplitPane的時候,分割線老是自由的變更,使得效果很差看,因此我查過相關資料,終於解決這個問題了。 html

     JSplitPane.setEnabled(false);      // 禁止拖動分割條 java

     JSplitPane.setDividerLocation(double proportionalLocation);           // 設置分割比例 api

      注意:必須在frame.setVisible(true);以後纔有效 ide

      理由:根據 setDividerLocation(int) 來實現此方法。此方法以分隔窗格的當前大小爲基礎迅速改變窗格的大小。若是分隔窗格沒有正確地實現而且不顯示在屏幕上,此方法將不產生任何影響(新的分隔條位置將成爲0(當前的 size *proportionalLocation ))。
     參數:
     proportionalLocation - 指示百分比的雙精度浮點值,從 0 (top/left) 到 1.0 (bottom/right)
     拋出:IllegalArgumentException - 若是指定的位置爲 < 0 or > 1.0
函數

     看完後沒什麼概念。。。只以爲寫的不是那麼直白,也許確有什麼貓膩在裏邊。特別是"若是分隔窗格沒有正確地實現而且不顯示在屏幕上,此方法將不產生任何影響"這句,沒大理解。。。 佈局

     於是去看看JSplitPane的源碼。關於setDividerLocation大體以下: spa

     public void setDividerLocation(double proportionalLocation) {
         if (proportionalLocation < 0.0 || proportionalLocation > 1.0) {
             throw new IllegalArgumentException("proportional location must "
"be between 0.0 and 1.0.");
        }
        if (getOrientation() == VERTICAL_SPLIT) {
            setDividerLocation((int)((double)(getHeight() - getDividerSize()) *
            proportionalLocation));
        }
        else {
            setDividerLocation((int)((double)(getWidth() - getDividerSize()) *
            proportionalLocation));
        }
    } htm

    這下有些明白了,setDividerLocation(double)這個函數會用到getWidth()或者getHeight()這樣的函數,而java桌面程序在沒有主窗體setVisible以前,若是使用佈局,還沒有validate()和paint()每一個組件的寬和高默認都是0。也就是說必定要在主窗體setVisible(true)以後再使用setDividerLocation(double)纔會有效。 get

相關文章
相關標籤/搜索