2011-09-15 204 views
0

是否禁止使用多個預設維度對象來設置屏幕上不可調整大小的組件的首選大小。 例如: - 2個文本框都應該是80x20像素這樣:Java在設置組件大小時重用Dimension對象

Dimension d = new Dimension(80, 20); 
tf1.setPreferredSize(d); 
tf2.setPreferredSize(d); 
+3

真正的問題是:你真的應該叫'setPreferreedSize()'在'JTextField'(或任何Swing'JComponent')?答案是否定的,這是一個非常糟糕的做法。 – jfpoilpret

+1

「在醫學中,禁忌是一種條件或因素,可以作爲拒絕某種醫療的理由。」 –

回答

3

是的,它是「安全」。從Java Performance Tuning引用:

[...] 此相同的Dimension對象可以爲多個部件重複使用。 [...]

取決於你想要什麼。請注意,在Component實現不復制參數的內容,但存儲參考:

public void setPreferredSize(Dimension preferredSize) { 
    ... 
    this.prefSize = preferredSize; 
    ... 
} 

因此更改d會影響存儲在這兩個tf1tf2的維對象。

(我想說的是,下面的代碼可能不是你所期待的。)

Dimension d = new Dimension(80, 20); 
tf1.setPreferredSize(d); 

d.width += 1;    // <-- will affect also tf1. 
tf2.setPreferredSize(d); 
+2

但是,當您更改'd'時,'tf1' *和*'tf2'都不會*通知*,所以他們只能「偶然」發現它。這就是爲什麼我認爲像Dimension這樣可變的東西不是個好主意。 –

+0

是的。我同意...... – aioobe

+1

@Joachim,實際上是Sun製作'Dimension','Point','Rectangle' ...... mutable最初是一個糟糕的設計決定,因此現在需要開發人員關注這個事實,並且防禦地編碼這種類的實例的可變性。 – jfpoilpret