如何从ActionListener内部类向按钮添加侦听器?

时间:2015-12-06 08:49:37

标签: java swing jbutton actionlistener inner-classes

我正在尝试通过在netbeans上构建我的swing接口来做一个简单的计算器程序。

我想要3个类:

  1. GUI类 - 包含构建界面的代码
  2. 侦听器类 - 保存GUI界面中的所有侦听器
  3. 引导类 - 这将启动应用程序
  4. 为简单起见,我将发布一个按钮的代码。我的目标是将按钮可见文本从“1”更改为“11”以测试我的设计。在确认我的设计有效后,我将继续处理其他按钮。

    calculatorGUI.class

    import javax.swing.JButton;
    
    public class calculatorGUI extends javax.swing.JFrame {
    
    public calculatorGUI() {
        initComponents();
    }
    
    private void initComponents() {
    oneBtn = new javax.swing.JButton();
    oneBtn.setText("1");
    }
    
    private javax.swing.JButton oneBtn;
    
    public JButton getOneBtn() {
        return oneBtn;
    }
    
    public void setOneBtn(String name) {
        oneBtn.setText(name);
    }
    }
    

    Listener.class

    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class Listener {
    
    class oneBtnListener implements ActionListener {
        @Override
       public void actionPerformed(ActionEvent ev) {
           calculatorGUI g = new calculatorGUI();
           g.setOneBtn("11");
       }
    
    } 
    

    }

    Boot.class

    public class Boot {
    
    public static void main(String[] args) {
         calculatorGUI gui = new calculatorGUI();
         Listener listen = new Listener();
         Listener.oneBtnListener oneListen = listen.new oneBtnListener();
         gui.getOneBtn().addActionListener(oneListen);
         gui.setVisible(true);
    }
    
    }
    

    问题是,单击按钮时没有任何反应。似乎actionListener没有注册到按钮。我能错过哪个角度向你求助吗?

2 个答案:

答案 0 :(得分:0)

我看到的问题是你如何初始化calculatorGUI两次,一次使用默认值,另一次使用更改后的值。在您的Listener类中取出calculatorGUI的初始化并从Boot class传递它,它应该可以正常工作。

虽然如果我是你,我会在GUI类中添加GUI实现,将它放在主函数中使用的监听器类中,这不是我以前见过的,可能不会建议。

答案 1 :(得分:0)

相应地修改您的代码,

dt[text()="cat1"]/following-sibling::dd[preceding-sibling::dt[1]/text()='cat1']
  

你可以根据你的要求改变其他部分,我只是   给你“1” - > “11”,但你可以做得更多。

     

最好的运气。