簡體   English   中英

如何從ActionListener內部類向按鈕添加偵聽器?

[英]How to add a listener to a button from a ActionListener inner class?

我試圖通過在netbeans上構建我的swing接口來做一個簡單的計算器程序。

我想參加3個課程:

  1. GUI類-包含用於構建接口的代碼
  2. 偵聽器類-在GUI界面中保存所有偵聽器
  3. 引導類-這將啟動應用程序

為簡單起見,我將為單個按鈕發布代碼。 我的目標是將Buttons可見文本從“ 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);
}
}

偵聽器類

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");
   }

} 

}

引導類

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注冊到該按鈕。 我可以在我錯過的哪個角度要求您的幫助嗎?

我看到的問題是你如何初始化calculatorGUI兩次,使用默認值,另一個改變的值一次。 取出的初始化calculatorGUI監聽器類中,並從您傳遞Boot class ,它應該工作的罰款。

雖然如果您是我,我會在GUI類中添加GUI實現,但在主函數中使用的偵聽器類中添加它卻不是我以前見過的,並且可能不建議這樣做。

相應地修改您的代碼,

class Listener {

class oneBtnListener implements ActionListener {
   @Override
  public void actionPerformed(ActionEvent ev) {
      if(ev.getActionCommand() == "1")
      {
          JButton btn = (JButton)ev.getSource();
          btn.setText("11");
      }
  }

}
}

class calculatorGUI extends javax.swing.JFrame {

public calculatorGUI() {
   initComponents();
}

private void initComponents() {
oneBtn = new javax.swing.JButton();
oneBtnListener btnListener = new Listener().new oneBtnListener();
oneBtn.setText("1");
oneBtn.setBounds(100,100,100,25);
oneBtn.addActionListener(btnListener);
add(oneBtn);

setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
}

private javax.swing.JButton oneBtn;

public JButton getOneBtn() {
   return oneBtn;
}

public void setOneBtn(String name) {
   oneBtn.setText(name);
}
}

您現在可以根據需要更改其他部分,我只給了您“ 1”->“ 11”,但您可以做更多。

祝你好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM