当前位置: 首页 > 知识库问答 >
问题:

我可以向jFrame中的按钮添加ActionListener,并将actionPerformed方法放在另一个类中吗?

郭云
2023-03-14

我有一个jFrame,用户在其中输入数据,还有一个控制器类,我想在其中将数据输入一个新对象。目前,我已经在jFrame中的按钮中添加了一个侦听器,但无法让它识别控制器类中的actionPerformed方法。

侦听器的“this”部分表示它正在泄漏到构造函数中,而类本身则表示:

“CreateAccountGUI不是抽象的,并且不会覆盖Action Listener中的抽象方法actionPerformed(actionEvent)”

我还有其他按钮,但它们使用双击控件时提供的默认构造函数。

下面是jFrame构造函数的代码:

public class CreateAccountGUI extends javax.swing.JFrame implements ActionListener{

/**
 * Creates new form CreateAccountGUI
 */
public CreateAccountGUI() {
    initComponents();
    cboAccountType.setVisible(false);
    lblAccountType.setVisible(false);
    btnCreateAccount.addActionListener(this);
} 

下面是我希望actionPerformed方法驻留的类中当前的代码:

public class AccountStrategyController implements ActionListener, Observer{

private CreateAccountGUI view = null;

public void setView(CreateAccountGUI view){
    this.view = view;
    view.setVisible(true);//Show the account creation form
}

@Override
public void actionPerformed(ActionEvent e) {

}

目前我在这门课上没有任何错误。

我在网上看了一下,似乎你可以在不同的课程中添加监听器和操作,但我似乎无法理解。

非常感谢您的帮助:)

共有2个答案

巫马磊
2023-03-14

我建议这样做:1。首先,在使用MVC(model view controller)结构时,必须区分文件。例如,您的第一个代码是一个从JFrame扩展而来的类。此类转到视图包,无法实现ActionListener。ActionListener适用于控制器。要将JFrame类与控制器链接,必须在“CreateAccountGUI”中创建如下方法:

public void registerControllers(AccountStrategyController controller) {
    jButton.setActionCommand("JBUTTON");
    jButton.addActionListener(controller);
}

然后,在actionPerformed()方法中,必须编写以下代码:

public void actionPerformed(ActionEvent e) {
    switch(e.getActionCommand()) {
        case "JBUTTON":
            //Your code goes here
            break;
    }
}

为了使这个工作,在主类中,你必须在其中初始化GUI,你必须这样写:

public static void main(String[] args) {
    // Elements de la interfície gràfica
    CreateAccountGUI gui = new CreateAccountGUI();
    AccountStrategyController asc = new AccountStrategyController();
    gui.registerControllers(asc);   
}

希望对你有帮助

吴兴国
2023-03-14

你可以做:

public class CreateAccountGUI extends javax.swing.JFrame {

    public CreateAccountGUI() {
        /**/
        JButton btnCreateAccount = new JButton("Create");
        AccountStrategyController controller = new AccountStrategyController();
        controller.setView(this);
        btnCreateAccount.addActionListener(controller);
    }
}

class AccountStrategyController implements ActionListener{

    private CreateAccountGUI view = null;

    public void setView(CreateAccountGUI view){
        this.view = view;
        view.setVisible(true);//Show the account creation form
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //respond to button click 
    }
}

或者更好:

public class CreateAccountGUI extends javax.swing.JFrame {

    public CreateAccountGUI() {
        /**/
        JButton btnCreateAccount = new JButton("Create");
        AccountStrategyController controller = new AccountStrategyController();
        controller.setView(this);
        btnCreateAccount.addActionListener(controller.createAccountListener());
    }
}

class AccountStrategyController{

    private CreateAccountGUI view = null;

    public void setView(CreateAccountGUI view){
        this.view = view;
        view.setVisible(true);//Show the account creation form
    }

    public  ActionListener createAccountListener(){     
        return new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //respond to button click 
            }
        };
    }   
}

createAccountListener可以使用lambdas编写:

public  ActionListener createAccountListener(){     
    return e -> {
        //respond to button click 
    };
}   
 类似资料:
  • 问题内容: 这是由于尝试使我的html语义尽可能正确而导致的问题。 我有一个父按钮,它在同一页面中既起作用,又充当嵌套锚的大容器的父标签(重定向到另一个页面),而div标签又充当另一个按钮的父标签应该执行一些动作。 我尝试嵌套按钮,为它提供了一个类和ID,但我没有应用到该类的任何属性,并且对子按钮也没有执行ID,更多情况下,子按钮也完全脱离了大容器并放置在DOM就像它是一个完全独立的标记,没有其他

  • 我必须插入一个JFrame,另一个类的一个JPanel。我在JFrame中有一个jMenuItem,我希望这样,当我单击jMenuItem,就会出现JPanel。

  • 问题内容: 我有一JFrame堂课,它是在Netbeans的设计部分制作的。我正在尝试创建一个登录按钮,该按钮将关闭当前框架并打开另一个框架,无论如何我可以这样做吗? 我努力了: 但我希望它在设计部分中可编辑! 问题答案: 双击NETBEANS中的“登录”按钮,或在Click事件上添加事件监听器(ActionListener)

  • 很多人可能都知道,我是一个完全的Java新手。我已经尝试过对此进行研究(通过阅读StackOverflow上的其他帖子,在谷歌上搜索,并询问一位不太熟悉java的朋友),但我无法理解。答案可能很清楚也很简单,但我对此视而不见。我试图从不同的帧中处理JFrame。 我的应用程序应该按如下方式工作: 帧X有一个按钮,按下时:生成帧Y 帧Y有一个按钮,按下时:生成帧Z Frame Z有一个按钮,按下时: