2011-09-15 3 views
0

미리 설정된 여러 차원 개체를 사용하여 화면에 크기를 조정할 수없는 구성 요소의 기본 크기를 설정하는 것은 금기 사항입니다. 예컨대 : 두 텍스트 필드 모두 그렇게 80x20 픽셀이어야합니다Java 재사용 구성 요소 크기를 설정할 때 차원 개체

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

진짜 질문은 당신이 정말로'부르는'JTextField'에 setPreferreedSize() '한다 (또는 임의의 Swing'JComponent')? 대답은 '아니요, 아주 나쁜 습관입니다. – jfpoilpret

+1

"의학에서 금기는 특정한 의료 치료를 보류하는 이유가되는 조건이나 요소입니다." –

답변

3

예, 그것은 "안전"입니다. Java Performance Tuning에서 인용 :

[...] 이 동일한 차원의 오브젝트가 복수의 구성 요소에 대해 재사용 될 수있다. [...]

당신이 원하는 것에 달려 있습니다.

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

그렇게 d을 변경하면 tf1tf2 모두에 저장된 차원 객체에 영향을 미칠 것입니다 : Component의 구현은 인수의 콘텐츠를 복사하지만 참조를 저장하지 않습니다.

(내가 말하고있는 것은 아래의 코드는 당신이 무엇을 기대하지 않을 수 있음.)

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

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

그러나 'df'를 변경하면'tf1' *도 *'tf2'도 * 알림 *되지 않으므로 "우연히"그것에 대해서만 알 수 있습니다. 그래서 '차원'을 가변적으로 만드는 것이 나쁜 생각이라고 생각합니다. –

+0

예. 나는 동의한다 ... – aioobe

+1

@Joachim, 실제로 태양은'Dimension','Point','Rectangle'을 만든다 ... mutable은 처음에는 나쁜 디자인 결정 이었기 때문에 이제는이 사실을 염려하고 방어하는 코드를 개발자들에게 달려있다. 그러한 클래스의 인스턴스의 변경 가능성. – jfpoilpret

관련 문제