2009-09-13 8 views
2

다른 클래스 (GUI)의 인스턴스를 만드는 클래스 (시뮬레이션)가 있습니다. 클래스 GUI에는 actionListener가 첨부 된 버튼 (시작)이 있습니다.한 클래스의 ActionListener를 사용하여 다른 클래스의 타이머 시작

시뮬레이션에서 타이머를 시작하려면이 액션 리스너가 필요하지만 어떻게해야하는지 알 수 없습니다. 클래스 시뮬레이션에서

코드 : 클래스 GUI에서

public class Simulation{ 

private static JFrame frame; 
private static GUI control; 
public static Integer xcontrol = 100, ycontrol = 100; 

public Timer timer; 
public int steps; 

public static void main(String[] args) { 
    Simulation sim = new Simulation(); 

} 

public Simulation() { 

frame = new JFrame("Action Listener Test"); 
frame.setLayout(new BorderLayout(1,0)); 

control = new GUI (xcontrol, ycontrol); 
frame.getContentPane().add(control , BorderLayout.CENTER); 

frame.setResizable(false); 
frame.pack(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 
} 


public void StartTimer() { 
    timer.start(); 
    System.out.println("It worked!"); 
} 

코드 : "Simulation.timer.start();"

 panel1.add(button1a); 

      button1a.addActionListener(new ActionListener() { 
       public void actionPerformed (ActionEvent event) { 
        Simulation.StartTimer(); 
        } 
       }); 

이클립스가 나에게 말한다 오류는, 그것을위한입니다 :

시뮬레이션 유형에서 비 정적 메서드 StartTimer()에 대한 정적 참조를 만들 수 없습니다.

이 타이머를 깰 것 같은 방법의 StartTimer는()는 정적이 될 수 없습니다 그러나

...

는 어떤 도움을 매우 극명하게 될 것이다.

+0

는 – iny

+0

의의 actionPerformed 이제 읽 Simulation.StartTimer를(); – Myles

답변

0

thisGUI 생성자의 인수로 전달하십시오.

일반적으로 이러한 순환 참조를 피하는 것이 가장 좋습니다. GUISimulator은 서로 종속됩니다. 이 솔루션의 핵심은 흥미로운 도메인 별 동작과 GUI를 분리하는 것입니다.

(BTW : 나는 강력하게 상수 이외의 다른 정적 변수를 사용하지 않는 것 또한 JFrame을 확장하지 않는 비 개인 인스턴스 변수하지만 포인트를 피할 수 있습니다..!)

당신이에 추가 할 몇 가지 끔찍한 상용구있다 멀티 스레딩을 방지합니다. 내가 할 것이 무엇

public static void main(final String[] args) { 
    java.awt.EventQueue.invokeLater(new Runnable() { public void run() { 
       Simulation sim = new Simulation(); 
    }}); 
} 
+0

정말 "시뮬레이터"강사였습니다. 그 시뮬레이션 자체가 "시뮬레이션"객체이기 때문에 GUI 생성자 I에 대한 인수가 될 수 없습니다. 생각하지 마라. – Myles

0

은 GUI 클래스는 다음 GUI 객체를 생성 한 후, 당신의 시뮬레이션 클래스는 버튼, 예를 들어,에 자신의 ActionListener를 추가 할 수 있습니다하는 getButton() 메소드를 통해 버튼을 노출이있다 .? 내가 실수로 잘못 코드 F 부분을 게시 죄송합니다 control.getButton() addActionListener에 (새의 ActionListener() ... 등의 actionPerformed가 SIM 얻는 방법

관련 문제