2013-10-19 58 views
0

我目前正在製作一個使用FlowLayout類的GUI。現在,這個類意味着允許通過他們喜歡的大小的方法來設置組件,我相信,在設置組件大小時不應該有優先權。但是,當我爲JTextField使用setSize方法時,FlowLayout對象似乎無法識別change size命令。但是當我使用setColumn方法時,FlowLayout對象確實響應了size命令中的更改。FlowLayout對象中的組件setSize方法

這是爲什麼?

+1

*「..通過他們喜歡的大小的方法,我相信,不應該有優先級設置組件大小。但是,當我使用setSize方法..」*首選大小和大小是不同的東西。但避免兩者。請參閱[我應該避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)。 –

回答

1

FlowLayout對象似乎無法識別change size命令。 但是當我使用setColumn方法時,FlowLayout對象做了 響應size命令的改變。 這是爲什麼?

形成你自己的問題我明白,你知道FlowLayout作品服從組件的首選大小。然而,爲了回答你的問題,爲什麼真正JTextFeild.setColumn(int)迴應:因爲

只要setColumn(int)被調用,它無效()的JTextFeild分量和它上面的所有家長被標記爲需要進行佈局

public void setColumns(int columns) { 
     int oldVal = this.columns; 
     if (columns < 0) { 
      throw new IllegalArgumentException("columns less than zero."); 
     } 
     if (columns != oldVal) { 
      this.columns = columns; 
      invalidate(); // invalidate if column changes 
     } 
    } 

然後同時鋪設,調用的FlowLayout JTextFeild的getPreferredSize()功能,其覆蓋並實現爲使得它通過添加列的寬度返回的優選寬度:

public Dimension getPreferredSize() { 
     Dimension size = super.getPreferredSize(); 
     if (columns != 0) { 
      Insets insets = getInsets(); 
      size.width = columns * getColumnWidth() + 
       insets.left + insets.right; // changing the width 
     } 
     return size; 
    } 

猜測什麼!我正在成爲源代碼的粉絲。