두 개의 클래스로 나뉘어 진 폼이 있습니다. 각 클래스는 양식의 일부인 위젯을 나타냅니다. 이 클래스가 서로간에 데이터를 공유하고 서로를 업데이트 할 수있게하는 가장 좋은 방법은 무엇입니까?클래스 간 통신
예 : 클래스 A의 버튼을 클릭합니다. 클래스 C의 텍스트 필드 업데이트
두 개의 클래스로 나뉘어 진 폼이 있습니다. 각 클래스는 양식의 일부인 위젯을 나타냅니다. 이 클래스가 서로간에 데이터를 공유하고 서로를 업데이트 할 수있게하는 가장 좋은 방법은 무엇입니까?클래스 간 통신
예 : 클래스 A의 버튼을 클릭합니다. 클래스 C의 텍스트 필드 업데이트
이 당신이 할 수있는 매우 짧 :
가 다른 클래스public class ButtonFrame extends JFrame implements ActionListener
{
private TextFieldFrame frame;
public ButtonFrame(TextFieldFrame frame)
{
this.frame = frame;
// init your components and add this as actionlistener to the button
....
}
public void actionPerformed(ActionEvent evt)
{
frame.notifyButtonPressed();
}
}
: 이것은 당신이 무엇을 매우 짧은 다시
public class TextFieldFrame extends JFrame
{
private JTextField field = ...; // init in your constructor
public void notifyButtonPressed()
{
field.setText("Yes man!! The button is pressed by the user!");
}
}
입니다 할 것.
Singleton
패턴으로 작업 할 수도 있지만 더 좋은 방법입니다.
모든 양식 객체를 보유하는 클래스를 만들 수 있습니다. 폼 클래스는 모두 부모 클래스를 알고 그것을 통해 통신합니다.
버튼이 클래스 A에서 클릭되면 클래스 A는 부모 클래스의 메서드를 호출하고 부모 클래스는 클래스 C에 해당 텍스트 필드를 업데이트하도록 알립니다.
위젯을 생각하지 마십시오. 모델에 응용 프로그램을 설계하십시오. 위젯을 해당 모델에 창으로 표시하십시오. (그리고 불필요하게 클래스를 확장하지 않습니다.)
Mediator pattern을 보시면 아이디어를 얻을 수 있습니다.
또한 JFace 데이터 바인딩 프레임 워크의 목표는 객체 간의 값 동기화입니다.하지만 문서화가 잘되어 있지 않고 사용할 재미가 없습니다. JFace_Data_Binding