2010-08-11 3 views
0

에서 회원 인스턴스 변수에 액세스 나는 다음과 같은 구조를 가지고 :Java; 또 다른 클래스

public class A { 
    private javax.swing.JLabel fullName; 

    public class B { 
      public B() { 
        fullName.setText("Martha Stewart"); 
      } 
    } 
    ... 
    ... 
    ... 
} 

내 목표는 별도의 클래스에있을 B (A의 현재 서브 클래스)를 가지고하는 것입니다.

문제는 다음과 같습니다. 두 클래스를 분리하면 JLabel에 대한 .setText() 호출 기능이 손실됩니다. B가 별도의 클래스에 있으면 클래스 A에 공용 설정 메서드를 작성해야한다는 것을 알게되었습니다.

약 100 개의 버튼이 있고 각각에 대해 4-5 개의 서로 다른 함수를 사용하므로 그럴듯하지 않습니다. 단추. 각 함수에 대한 getter/setter 메서드를 만드는 것이 그럴듯한 것은 아닙니다. IMHO.

나는 더 나은 해결책을 고민하는 중입니다. 여러분 중 누구라도 도울 수 있습니까, 친구?

+0

왜 하위 클래스로 제거 하시겠습니까? –

+1

레이블 텍스트를 별도의 클래스로 설정하려는 이유를 설명 할 수 있습니까? JLabel과 String을 가져 와서 해당 레이블 객체에서 setText를 호출하는 메서드를 만들 수 있습니까? 그러면 클래스 A는 JLabel 객체를 전달할 수 있고 클래스 A 외부에서 수정됩니다. (사용자의 의도를 이해할 수 없으므로 답변의 자격이 있는지 확실하지 않습니다.) – MikeTheReader

+0

클래스 B는 특정 "탭 그룹 "내 GUI에는 많은 것이 더 있습니다. 예 : 나는 5 개의 모듈을 가진 시뮬레이터를 가지고있다. 각 모듈은 하위 클래스입니다. 각 하위 클래스는 GUI에서 특정 작업을 수행합니다. –

답변

2

B 는 다른 유형의 필드에 대한 액세스를 얻으려고해서는 안, A의 서브 클래스 그것은

그러나 A. 내에서 중첩 (내부) 클래스의 아니다 - 그것은 캡슐을 나누기 . 속성은 더 좋은 해결책입니다 - 또는 fullName.setText()을 호출하는 setFullNameText 메서드입니다. 단지 100 개의 버튼이 있기 때문에 (그렇다고!) 그것이 캡슐화를 창 밖으로 던질 시간이라는 의미는 아닙니다. 이 필드를 작은 클래스로 그룹화하는 것이 좋습니다.

+0

응답 해 주셔서 감사합니다! getter/setters를 자동 생성하는 방법이 있습니까? 아니면 개별적으로 하나씩 수행해야합니까? –

+2

이클립스와 같은 IDE로 모든 것을 생성 할 수 있습니다. – KeatsPeeks

2

클래스가 다른 클래스의 속성을 수정하지 못하게하면 캡슐화가 중단됩니다. getter와 setter를 견디지 ​​못한다면,지도와 같은 구성 객체 (constructor) 및/또는 기본 GUI 클래스의 설정자 (setter)를 제공 할 것을 제안합니다. 그런데

:

나는 약 100 버튼

나는 그것이 주요 문제라고 생각을합니다. 컨트롤 그룹을 나타내는 여러 클래스에서 GUI를 중단해야합니다.