Java 其他类中的JButton调用函数

Java 其他类中的JButton调用函数,java,swing,jbutton,Java,Swing,Jbutton,我正在创建一个计时器应用程序。我创建了计时器(毫秒)和接口(使用JFrame)。我想在我的主类“应用程序”中单击bouton“开始按钮”(在类“WindowChrono”)时启动我的chrono(在类“chrono”中) WindowChrono中的启动按钮 JButton Start_按钮=新JButton(“开始”); 启动按钮。设置前景(颜色。蓝色); Start_button.setFont(新字体(“Tahoma”,Font.PLAIN,20)); 开始按钮。设置背景(新颜色(255、

我正在创建一个计时器应用程序。我创建了计时器(毫秒)和接口(使用JFrame)。我想在我的主类“应用程序”中单击bouton“开始按钮”(在类“WindowChrono”)时启动我的chrono(在类“chrono”中)

WindowChrono中的启动按钮

JButton Start_按钮=新JButton(“开始”);
启动按钮。设置前景(颜色。蓝色);
Start_button.setFont(新字体(“Tahoma”,Font.PLAIN,20));
开始按钮。设置背景(新颜色(255、255、255));
开始按钮。立根(474、456、142、27);
启动按钮。添加ActionListener(新建ActionListener(){
已执行的公共无效操作(操作事件arg0){
如果(i==0){
开始按钮。设置文本(“停止”);
i=1;
}
否则{
开始按钮。设置文本(“开始”);
i=0;
}
}
});
应用程序中的main

公共类应用程序扩展了WindowChrono{
公共void main(字符串[]参数){
WindowChrono window=新的WindowChrono();
run();
计时器=新的计时器();
int刷新时间=10;
Timer.start();//在BOUTON启动时激活LORS DE L
Timer.stop();//LORS DE L ACTIVATION DU BOUTON stop
while(Timer.getStopTime==0){
线程。睡眠(刷新时间);
System.out.println(Timer.actualTime());//将时间固定在时间上
}
System.out.println(Timer.getTime());
}
}

我该怎么做呢?

首先,您要显示您的窗口。因此,在您的
main
方法中,您可以将此代码用于启动它:

java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
           Application window = new Application();  // Application is a WindowChrono because it extends it
           window.setVisible(true);
      }
});
它将确保Swing尽快处理窗口的外观(调用器)。所以你不用再担心了

现在,一旦窗口可见,它将接管。所有算法、方法或您执行的任何操作都应该在窗口实例中执行(不再在
main
中执行)

因此,您的
应用程序
在某个地方有一个构造函数:

public class Application extends WindowChrono{

     public Application(){
           // your constructor will be executed when you call "new Application()"
     }
}
在构造函数中,您可以初始化计时器(不启动它),以便“计时器”实例存在于您的窗口中

private Chrono timer;

public Application(){
    this.timer = new Chrono();
}
你的纽扣已经很好看了。现在,您只需要从
ActionListener
内部启动/停止计时器:

        public void actionPerformed(ActionEvent arg0) {
            if(i==0) {
                Start_button.setText("Stop");
                i = 1;
                Application.this.timer.start();
            }
            else {
                Start_button.setText("Start");
                i = 0;
                Application.this.timer.stop();
            }
        }
这个
之前提到
应用程序
,这对于告诉Java您指的是当前的
应用程序
实例(不是
ActionListener
的实例)是必要的

您还可以将“actionListener”方法直接放入
应用程序中:

 public void performButtonAction(int i){
      // the code from your action listener
 }
然后像这样调用该方法:

Start_button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
       performButtonAction(i);
    }
});
我唯一不清楚的是你的
i
来自何处(为什么它是
int
而不是
boolean
,你不认为这更容易吗?)


哦,还有一件事:变量名应该以小写字母
start\u按钮
开头,而不是
start\u按钮
。只有类名以大写字母开头。这有助于您保持代码清晰。假设您有这样的情况:
Application Application=new Application()
。现在是什么?:)首先要显示窗口。因此,在您的
main
方法中,您可以将此代码用于启动它:

java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
           Application window = new Application();  // Application is a WindowChrono because it extends it
           window.setVisible(true);
      }
});
它将确保Swing尽快处理窗口的外观(调用器)。所以你不用再担心了

现在,一旦窗口可见,它将接管。所有算法、方法或您执行的任何操作都应该在窗口实例中执行(不再在
main
中执行)

因此,您的
应用程序
在某个地方有一个构造函数:

public class Application extends WindowChrono{

     public Application(){
           // your constructor will be executed when you call "new Application()"
     }
}
在构造函数中,您可以初始化计时器(不启动它),以便“计时器”实例存在于您的窗口中

private Chrono timer;

public Application(){
    this.timer = new Chrono();
}
你的纽扣已经很好看了。现在,您只需要从
ActionListener
内部启动/停止计时器:

        public void actionPerformed(ActionEvent arg0) {
            if(i==0) {
                Start_button.setText("Stop");
                i = 1;
                Application.this.timer.start();
            }
            else {
                Start_button.setText("Start");
                i = 0;
                Application.this.timer.stop();
            }
        }
这个
之前提到
应用程序
,这对于告诉Java您指的是当前的
应用程序
实例(不是
ActionListener
的实例)是必要的

您还可以将“actionListener”方法直接放入
应用程序中:

 public void performButtonAction(int i){
      // the code from your action listener
 }
然后像这样调用该方法:

Start_button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
       performButtonAction(i);
    }
});
我唯一不清楚的是你的
i
来自何处(为什么它是
int
而不是
boolean
,你不认为这更容易吗?)

哦,还有一件事:变量名应该以小写字母
start\u按钮
开头,而不是
start\u按钮
。只有类名以大写字母开头。这有助于您保持代码清晰。假设您有这样的情况:
Application Application=new Application()
。现在是什么?:)