2012-10-22 2 views
3

Java 프로젝트에서 GridBagLayout을 사용하여 UI를 레이아웃했습니다. UI의 모든 구성 요소에는 GridBagConstraints가 UI에 구성 요소를 배치하는 데 사용하는 x 및 y 좌표가 연결되어 있습니다.많은 클래스에 약간의 기능 추가하기

UI의 좌표 (x, y)에 특정 구성 요소를 배치하는 addAt (component, x, y, constraints) 메서드가 있습니다.

오히려 내 UI를 설정하려면 다음을 수행하는 것보다 :

addAt(component1, 3, 1, constraints); 
addAt(component2, 3, 2, constraints); 
addAt(component3, 3, 3, constraints); 
addAt(component4, 3, 4, constraints); 

내가 나에게 줄 것 개체 자체의 각 구성 요소의 좌표, 저장하고 싶은 :

addAt(component1, constraints); 
addAt(component2, constraints); 
addAt(component3, constraints); 
addAt(component4, constraints); 

내 현재의 방법은, 사용하고있는 모든 JComponents의 기본 클래스를 오버라이드 (override) 해, getXCoord() 및 getYCoord() 메소드를 사용해 인터페이스를 구현하는 것입니다.

JComponents에는 getX() 및 getY() 메소드가 있지만이 메소드의 목적은 내가하는 일과 다릅니다.

기본적으로 내 질문은 위의 정보가 주어지면 모든 개별 JComponent의 재정의 된 버전을 만드는 것보다이 기능을 구현하는 더 깨끗한 방법이 있습니까? 내가 여기서 분명히 빠진 것이 있다면 사과드립니다.

+0

좌표를 구성 요소와 어떻게 연결합니까? –

+0

@ Jordão 더 많은 배경 정보 : 내 프로그램은 스택 히트 맵이라고합니다. StacksComponent와 같은 이름의 인터페이스와 StacksComponent를 구현하는 커스텀 JComponents를 만들었습니다. 예를 들어, StacksJLabel과 StacksJButton을 만들었습니다. 따라서 오버라이드 된 클래스의 경우 StacksJLabel label = new StacksJLabel ("Text", 2, 3)과 같이 생성자에서 좌표를 설정합니다. addAt() 메서드에서 수행중인 작업은 다음과 같습니다. constraints.gridx = component.getXCoord(); constraints.gridy = component.getYCoord(); add (구성 요소, 제약 조건); –

답변

3

메디 에이터 또는 get/putClientProperty 메서드를 사용하여 구성 요소와 좌표 간의 연결을 저장하고 addAt 메서드에서 좌표를 검색 할 수 있습니다.

class Coordinates { 
    private final int x; 
    private final int y; 
    public Coordinates(int x, int y) { 
    this.x = x; 
    this.y = y; 
    } 
    public int getX() { return x; } 
    public int getY() { return y; } 
} 

그리고 당신은 당신의 addAt에서 사용 :

좌표는 다음과 같이 할 수 있습니다

private void addAt(JComponent component, GridBagConstraints constraints) { 
    Coordinates coordinates = (Coordinates)component.getClientProperty("coords"); 
    int x = coordinates.getX(); 
    int y = coordinates.getY(); 

    // place it in the grid... 
} 

당신은 연결을 생성, 예를 들어, 다음과 같이 :

public void setUpComponentsCoordinates() { 
    component1.putClientProperty("coords", new Coordinates(3, 1)); 
    component2.putClientProperty("coords", new Coordinates(3, 2)); 
    component3.putClientProperty("coords", new Coordinates(3, 3)); 
    component4.putClientProperty("coords", new Coordinates(3, 4)); 
} 
+0

많은 감사 Jordão, get/putClientProperty 정확히 내가 뭘 찾고있어 보인다. 이렇게하면 코드가 훨씬 깨끗해집니다. 디자인 패턴에 대해 여전히 무지한 - 중재자 패턴에 대해 읽을 것입니다. –

+0

@ DanielNeel : 오신 것을 환영합니다! –

관련 문제