gpt4 book ai didi

Java - (非内部)可运行类中的 Actionlistener 不执行

转载 作者:行者123 更新时间:2023-12-02 06:36:30 24 4
gpt4 key购买 nike

我正在尝试为 java swing GUI 编写干净的 OOP 代码。所以我创建了一个实现 Runnable 的类并应该处理所有操作。所有数据和组件都存储在一个充满 getter 和 setter 的数据类中。

public class UserInterface{
...
public void foo(){
PanelActions panelActions = new PanelActions();
Thread tProgressbar = new Thread(panelActions, "Update progressbar");
tProgressbar.start();
}
}

public class PanelActions implements Runnable{
GUIdata data = new GUIdata();
public void run(){

//submitButton
data.getSubmitButton().addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
//Some code
}
});

//Browse Button
data.getBrowseButton().addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
//Some code
}
});
};
}

以及 getter 和 setter 类:

public class GUIdata{
private JButton submitButton;
private JButton browseButton;

GUIdata(){
submitButton = new JButton();
browseButton = new JButton();
}

public JButton getSubmitButton() {
return submitButton;
}

public void setSubmitButton(JButton submitButton) {
this.submitButton = submitButton;
}

public JButton getBrowseButton() {
return browseButton;
}

public void setBrowseButton(JButton browseButton) {
this.browseButton = browseButton;
}
}

但是这样,执行的操作中的代码就无法工作。线程启动并且 run 方法运行良好。但它可能不喜欢将 ActionListener 添加到 get 方法中。即使我尝试过这个:

JButton browse = data.getBrowseButton();

browse.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
//Some code
}
});
data.setBrowseButton(browse);seButton(browse);

但即使这样也不是正确的方法。

那么有人知道如何将 ActionListener 添加到另一个类的 Button 中吗?谢谢:)

最佳答案

要在单独的线程中执行按钮操作,请勿将操作监听器的创建放入方法运行中,而应将要执行的操作放入方法运行中。

  1. 从 PanelActions 中删除任何可运行的内容:

    public class PanelActions {
    GUIdata data = new GUIdata();


    //submitButton
    data.getSubmitButton().addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent evt) {
    //Some code
    }
    });

    //Browse Button
    data.getBrowseButton().addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent evt) {
    //Some code
    }
    });
    }
  2. 在actionPerformed中创建一个Runnable或Thread并开始执行

    @Override
    public void actionPerformed(ActionEvent evt) {
    Thread thread = new Thread() {
    @Override
    public void run() {
    //Some code
    }
    };
    thread.start();
    }

关于Java - (非内部)可运行类中的 Actionlistener 不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19591129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com