미리 설정된 여러 차원 개체를 사용하여 화면에 크기를 조정할 수없는 구성 요소의 기본 크기를 설정하는 것은 금기 사항입니다. 예컨대 : 두 텍스트 필드 모두 그렇게 80x20 픽셀이어야합니다Java 재사용 구성 요소 크기를 설정할 때 차원 개체
Dimension d = new Dimension(80, 20);
tf1.setPreferredSize(d);
tf2.setPreferredSize(d);
미리 설정된 여러 차원 개체를 사용하여 화면에 크기를 조정할 수없는 구성 요소의 기본 크기를 설정하는 것은 금기 사항입니다. 예컨대 : 두 텍스트 필드 모두 그렇게 80x20 픽셀이어야합니다Java 재사용 구성 요소 크기를 설정할 때 차원 개체
Dimension d = new Dimension(80, 20);
tf1.setPreferredSize(d);
tf2.setPreferredSize(d);
예, 그것은 "안전"입니다. Java Performance Tuning에서 인용 :
[...] 이 동일한 차원의 오브젝트가 복수의 구성 요소에 대해 재사용 될 수있다. [...]
당신이 원하는 것에 달려 있습니다.
public void setPreferredSize(Dimension preferredSize) {
...
this.prefSize = preferredSize;
...
}
그렇게 d
을 변경하면 tf1
및 tf2
모두에 저장된 차원 객체에 영향을 미칠 것입니다 : Component
의 구현은 인수의 콘텐츠를 복사하지만 참조를 저장하지 않습니다.
(내가 말하고있는 것은 아래의 코드는 당신이 무엇을 기대하지 않을 수 있음.)
가Dimension d = new Dimension(80, 20);
tf1.setPreferredSize(d);
d.width += 1; // <-- will affect also tf1.
tf2.setPreferredSize(d);
그러나 'df'를 변경하면'tf1' *도 *'tf2'도 * 알림 *되지 않으므로 "우연히"그것에 대해서만 알 수 있습니다. 그래서 '차원'을 가변적으로 만드는 것이 나쁜 생각이라고 생각합니다. –
예. 나는 동의한다 ... – aioobe
@Joachim, 실제로 태양은'Dimension','Point','Rectangle'을 만든다 ... mutable은 처음에는 나쁜 디자인 결정 이었기 때문에 이제는이 사실을 염려하고 방어하는 코드를 개발자들에게 달려있다. 그러한 클래스의 인스턴스의 변경 가능성. – jfpoilpret
진짜 질문은 당신이 정말로'부르는'JTextField'에 setPreferreedSize() '한다 (또는 임의의 Swing'JComponent')? 대답은 '아니요, 아주 나쁜 습관입니다. – jfpoilpret
"의학에서 금기는 특정한 의료 치료를 보류하는 이유가되는 조건이나 요소입니다." –