Java 在一个类中使用ActionListener启动另一个类中的计时器
我有一个类(模拟),它创建另一个类(GUI)的实例。在类GUI中有一个按钮(start),它附带了一个actionlistener 我需要这个actionlistener在模拟中启动一个计时器,但我不知道怎么做 类内模拟代码:Java 在一个类中使用ActionListener启动另一个类中的计时器,java,swing,class,timer,actionlistener,Java,Swing,Class,Timer,Actionlistener,我有一个类(模拟),它创建另一个类(GUI)的实例。在类GUI中有一个按钮(start),它附带了一个actionlistener 我需要这个actionlistener在模拟中启动一个计时器,但我不知道怎么做 类内模拟代码: public class Simulation{ private static JFrame frame; private static GUI control; public static Integer xcontrol = 100, ycontrol = 100;
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!");
}
类GUI中的代码:
panel1.add(button1a);
button1a.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent event) {
Simulation.StartTimer();
}
} );
Eclipse告诉我有错误,是针对“Simulation.timer.start();”的错误:
无法从类型模拟对非静态方法StartTimer()进行静态引用
但是方法StartTimer()不能是静态的,因为这似乎会中断计时器
非常感谢您的帮助。将
此
作为参数传递给GUI
构造函数
一般来说,最好避免这种循环引用。GUI
和Simulator
彼此依赖。解决方案的本质是将GUI与有趣的特定于领域的行为分离开来
(顺便说一句:我强烈避免对常量以外的任何对象使用静态变量。也避免使用非私有实例变量。但不要扩展JFrame
!)
您应该添加一些可怕的样板文件来防止多线程
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
Simulation sim = new Simulation();
}});
}
将
此
作为参数传递给GUI
构造函数
一般来说,最好避免这种循环引用。GUI
和Simulator
彼此依赖。解决方案的本质是将GUI与有趣的特定于领域的行为分离开来
(顺便说一句:我强烈避免对常量以外的任何对象使用静态变量。也避免使用非私有实例变量。但不要扩展JFrame
!)
您应该添加一些可怕的样板文件来防止多线程
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
Simulation sim = new Simulation();
}});
}
我要做的是让您的GUI类通过getButton()方法公开按钮,然后在创建GUI对象后,您的模拟类可以将自己的ActionListener添加到按钮,例如control.getButton().addActionListener(new ActionListener()…等)。我要做的是让您的GUI类通过getButton()公开按钮方法,然后在创建GUI对象后,您的模拟类可以将其自己的ActionListener添加到按钮,例如control.getButton().addActionListener(new ActionListener()…等。actionPerformed是如何获得sim的?抱歉,我无意中错误地发布了代码的f部分,actionPerformed现在显示为:Simulation.StartTimer();actionPerformed是如何得到sim的?抱歉,我无意中错误地发布了代码的f部分,actionPerformed现在显示为:Simulation.StartTimer();抱歉,我在发布的代码中犯了一个错误。“主构造函数”实际上是一个“Simulation”讲师。因为这样的sim本身就是一个“Simulation”对象,所以它不可能是GUI构造函数的参数我不认为…我道歉,我在我发布的代码中犯了一个错误。“主构造函数”实际上是一个“模拟”讲师。因为这样的sim本身就是一个“模拟”对象,所以它不可能是GUI构造函数的参数我不认为。。。