设置组件大小时,Java重用Dimension对象

时间:2011-09-15 11:39:35

标签: java swing user-interface awt single-instance

禁止使用多个预设尺寸对象来设置屏幕上不可调整大小的组件的首选大小。 例如:两个文本域都应该是80x20像素,所以:

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

1 个答案:

答案 0 :(得分:4)

是的,这是“安全的”。引自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);