java - JButton 无法在 actionListener 内解析

标签 java eclipse swing

我正在尝试使用 Eclipse 制作一个简单的 GUI 计算器 actionlistener在底部,eclipse说我的ButtonAdd无法解析 错误位于第 125-131 行左右,感谢任何帮助! :D

package main;

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.event.ActionListener;

public class GUIApp {

private JFrame frame;
public JTextField txtNumber_1;
public JTextField txtNumber;
public JTextField textField;
public JButton ButtonAdd;
public JButton ButtonSub;
public JButton ButtonMulti;
public JButton ButtonDiv;
public JButton btnRng;
String num1;
String num2;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                GUIApp window = new GUIApp();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public GUIApp() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 * @return 
 */
public void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
    gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
    gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    frame.getContentPane().setLayout(gridBagLayout);

    ButtonAdd = new JButton("Addition");
    ButtonAdd.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            num1 = txtNumber_1.getText();
            num2 = txtNumber.getText();
           if(ButtonAdd.getModel().isPressed())
            textField.setText(num1 + num2);
        }
    });
    GridBagConstraints gbc_ButtonAdd = new GridBagConstraints();
    gbc_ButtonAdd.insets = new Insets(0, 0, 5, 5);
    gbc_ButtonAdd.gridx = 0;
    gbc_ButtonAdd.gridy = 0;
    frame.getContentPane().add(ButtonAdd, gbc_ButtonAdd);

    ButtonSub = new JButton("Subtraction");
    GridBagConstraints gbc_ButtonSub = new GridBagConstraints();
    gbc_ButtonSub.insets = new Insets(0, 0, 5, 5);
    gbc_ButtonSub.gridx = 0;
    gbc_ButtonSub.gridy = 2;
    frame.getContentPane().add(ButtonSub, gbc_ButtonSub);

    txtNumber_1 = new JTextField();
    txtNumber_1.setText("Number 1");
    txtNumber_1.setToolTipText("insert a number");
    GridBagConstraints gbc_txtNumber_1 = new GridBagConstraints();
    gbc_txtNumber_1.insets = new Insets(0, 0, 5, 0);
    gbc_txtNumber_1.fill = GridBagConstraints.HORIZONTAL;
    gbc_txtNumber_1.gridx = 3;
    gbc_txtNumber_1.gridy = 2;
    frame.getContentPane().add(txtNumber_1, gbc_txtNumber_1);
    txtNumber_1.setColumns(10);

    ButtonMulti = new JButton("Multiplication");
    GridBagConstraints gbc_ButtonMulti = new GridBagConstraints();
    gbc_ButtonMulti.insets = new Insets(0, 0, 5, 5);
    gbc_ButtonMulti.gridx = 0;
    gbc_ButtonMulti.gridy = 4;
    frame.getContentPane().add(ButtonMulti, gbc_ButtonMulti);

    txtNumber = new JTextField();
    txtNumber.setText("Number 2");
    txtNumber.setToolTipText("insert other number");
    GridBagConstraints gbc_txtNumber = new GridBagConstraints();
    gbc_txtNumber.insets = new Insets(0, 0, 5, 0);
    gbc_txtNumber.fill = GridBagConstraints.HORIZONTAL;
    gbc_txtNumber.gridx = 3;
    gbc_txtNumber.gridy = 5;
    frame.getContentPane().add(txtNumber, gbc_txtNumber);
    txtNumber.setColumns(10);

    ButtonDiv = new JButton("Division");
    GridBagConstraints gbc_ButtonDiv = new GridBagConstraints();
    gbc_ButtonDiv.insets = new Insets(0, 0, 5, 5);
    gbc_ButtonDiv.gridx = 0;
    gbc_ButtonDiv.gridy = 6;
    frame.getContentPane().add(ButtonDiv, gbc_ButtonDiv);

    btnRng = new JButton("RNG");
    GridBagConstraints gbc_btnRng = new GridBagConstraints();
    gbc_btnRng.insets = new Insets(0, 0, 0, 5);
    gbc_btnRng.gridx = 0;
    gbc_btnRng.gridy = 8;
    frame.getContentPane().add(btnRng, gbc_btnRng);

    textField = new JTextField();
    textField.setToolTipText("output");
    GridBagConstraints gbc_textField = new GridBagConstraints();
    gbc_textField.gridx = 3;
    gbc_textField.gridy = 8;
    frame.getContentPane().add(textField, gbc_textField);
    textField.setColumns(10);
}
public void actionPerformed(ActionEvent arg0) {
    String num1;
    String num2;
    num1 = txtNumber_1.getText();
    num2 = txtNumber.getText();
   if(ButtonAdd.getModel().isPressed())
    textField.setText(num1 + num2);

}
}

顺便说一下,GUI 是用 WindowBuilder 制作的

最佳答案

ButtonAdd 是本地引用,这意味着它只能在 initialize 方法内访问。解决方案是在方法外部声明 ButtonAdd

JButton ButtonAdd;

public void initialize() {
   ButtonAdd = new JButton("Addition");
}
public void actionPerformed(ActionEvent arg0) {
   // here we can now access ButtonAdd
}

还有一个提示,根据 java 的标准命名约定,您通常以小写字母开头变量和引用,因此 ButtonAdd -> buttonAdd

关于java - JButton 无法在 actionListener 内解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40635508/

相关文章:

java - 如何更改 javaCC adder.jj 以从命令提示符接收字符串而不是流?

java - JDialog 处理另一个窗口

java - Swing在GridBagLayout组件中绘制1px的组件间边框线

java - 在应用程序引擎 Memcache (java) 中存储不太重要的复杂数据结构以进行 session 间交互的示例

java异常

android - 如何独立于 AOSP 构建相机应用程序?

Java GUI 弹出菜单

java - readAllBytes()。文件系统异常 : The process cannot access the file because it is being used by another process

java - 逻辑错误与否?

javafx.builders 包的 JavaFX 导入错误