我目前正在製作一個使用FlowLayout類的GUI。現在,這個類意味着允許通過他們喜歡的大小的方法來設置組件,我相信,在設置組件大小時不應該有優先權。但是,當我爲JTextField使用setSize方法時,FlowLayout對象似乎無法識別change size命令。但是當我使用setColumn方法時,FlowLayout對象確實響應了size命令中的更改。FlowLayout對象中的組件setSize方法
這是爲什麼?
我目前正在製作一個使用FlowLayout類的GUI。現在,這個類意味着允許通過他們喜歡的大小的方法來設置組件,我相信,在設置組件大小時不應該有優先權。但是,當我爲JTextField使用setSize方法時,FlowLayout對象似乎無法識別change size命令。但是當我使用setColumn方法時,FlowLayout對象確實響應了size命令中的更改。FlowLayout對象中的組件setSize方法
這是爲什麼?
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;
}
猜測什麼!我正在成爲源代碼的粉絲。
*「..通過他們喜歡的大小的方法,我相信,不應該有優先級設置組件大小。但是,當我使用setSize方法..」*首選大小和大小是不同的東西。但避免兩者。請參閱[我應該避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)。 –