有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java ActionListener未拾取按钮

这是带有操作侦听器的按钮的代码:

JButton btnAddChild = new JButton("Add Child");
        btnAddChild.addActionListener(this.controller);
        formPanel.add(btnAddChild);

以下是我的操作侦听器中的代码:

else if(e.getActionCommand().equals("Add Child")){
            System.out.println("Hello");
            try {
                model.addChild(child.getFirstname(), child.getSurname(), child.getDOB(), child.getAddress(),
                        child.getGender(), child.getAllergy(), child.getInfo());
            } catch (Exception exc) {
                // TODO Auto-generated catch block
                exc.printStackTrace();
            }
        }

出于某种原因,它甚至不会打印“Hello”一行,所以我知道动作监听器没有被调用,我不知道为什么??请帮忙:)


共 (2) 个答案

  1. # 1 楼答案

    而不是使用

    this.controller
    

    (不确定它是如何声明或初始化的)尝试创建一个全新的动作侦听器作为参数,只是为了测试它。例如,如果您将动作侦听器定义为

    class CustomActionListener implements ActionListener{
          public void actionPerformed(ActionEvent e) {
               System.out.println("Hello");
          }
    }
    

    然后你可以像这样把动作监听器添加到按钮中

    btnAddChild.addActionListener(new CustomActionListener());
    

    正如在另一个答案中提到的,这可能是你的条件陈述的一个问题。试着把打印语句放在动作监听器的第一件事上

  2. # 2 楼答案

    下面是一个带有ActionListener的基本退出按钮。当您使用多个侦听器时,您应该按如下方式放置@Override注释。你甚至可以覆盖你创建的第一个ActionListener

    JButton cancelButton = new JButton("Exit");
            cancelButton.setActionCommand("Exit");
            windowPane.add(cancelButton);
            cancelButton.setBounds(0, 0, 1300, 900);
            cancelButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent x) {
                    dispose();
                }
            });