문제

모든 GUI를 처리하는 다른 클래스를 시작하는 프로그램에 메인 클래스가 있습니다. GUI에는 ActionListener를 첨부 해야하는 버튼이 있습니다.

유일한 문제는 실행될 코드가 메인 클래스 내에 존재해야한다는 것입니다.

버튼이 다른 곳에서 클릭 될 때 메인 클래스에서 실행할 actionPerformed () 메소드를 어떻게 얻을 수 있습니까?

도움이 되었습니까?

해결책

컨트롤러 ( "메인"클래스)를 actionlistener 인터페이스를 구현 한 다음 뷰 클래스에 대한 참조를 전달하십시오.

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

또한 수행 할 수 있습니다 행위, 그러나 그것은 하나의 코드가 많은 버튼에 응답하기를 원하는 곳에 더 유용합니다.

다른 팁

익명의 내부 클래스를 버튼에서 actionlistener로 구현 한 다음 메인 클래스에서 메소드를 호출하십시오. 이로 인해 종속성이 줄어들고 메인 클래스에서 ActionListener 인터페이스를 구현하는 것이 홍보하는 경향이 있다는 태그 및 스위치 스타일 프로그래밍을 피합니다.

두 경우 모두 종속성 그래프에서 사이클을 만듭니다. 메인 클래스는 버튼에 대해 알 수 있으며 버튼은 메인 클래스를 호출해야합니다. 다른 방식으로 물건을 구성하기가 어렵 기 때문에 이것은 좋은 생각이 아닐 수도 있습니다. 그러나 추가 정보가 없으면 상황을 판단하거나 콘크리트를 추천하기가 어렵습니다.

메인 클래스에서 ActionListener를 구현하고 GUI 버튼에서 메인 클래스 인스턴스를 리스너로 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top