【问题标题】:Accessing one button from another button's mouseClicked method?从另一个按钮的 mouseClicked 方法访问一个按钮?
【发布时间】:2014-10-13 22:14:05
【问题描述】:

所以我对如何从另一个组件的 mouseClicked 方法访问其他屏幕上的组件/变量(我不确定如何调用它们,但诸如文本框、按钮等)有点困惑。例如,假设一旦单击了一个按钮,另一个按钮就被禁用了。我的意思是,在这个简单的计算器示例(有两个文本框和一个加减按钮)中,它完全没有意义,但我只是想理解这个概念。使用其他编程语言,您可以直接访问它们,但使用 java,我不确定......无论如何,这里是相关的代码:

     JButton btnAdd = new JButton("Add");
     btnAdd.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            int num1 = Integer.parseInt(textField.getText().toString());
            int num2 = Integer.parseInt(textField_1.getText().toString());
            int total = num1 + num2;
            btnSubtract.setEnabled(false);
            JOptionPane.showMessageDialog(null, total); 
        }
    });

    JButton btnSubtract = new JButton("Subtract");
    btnSubtract.setBounds(144, 124, 89, 23);
    frame.getContentPane().add(btnSubtract);
   }
 }

或者如果我需要编辑其他内容,这里也是所有自动生成的代码:

public class SimpleCalcApp {

private JFrame frame;
private JTextField textField;
private JTextField textField_1;

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

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

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    textField = new JTextField();
    textField.setBounds(147, 27, 86, 20);
    frame.getContentPane().add(textField);
    textField.setColumns(10);

    textField_1 = new JTextField();
    textField_1.setBounds(147, 59, 86, 20);
    frame.getContentPane().add(textField_1);
    textField_1.setColumns(10);

    JButton btnAdd = new JButton("Add");
    btnAdd.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            int num1 = Integer.parseInt(textField.getText().toString());
            int num2 = Integer.parseInt(textField_1.getText().toString());
            int total = num1 + num2;
            btnSubtract.setEnabled(false);
            JOptionPane.showMessageDialog(null, total); 
        }
    });
    btnAdd.setBounds(144, 90, 89, 23);
    frame.getContentPane().add(btnAdd);

    JButton btnSubtract = new JButton("Subtract");
    btnSubtract.setBounds(144, 124, 89, 23);
    frame.getContentPane().add(btnSubtract);
}
}

我希望这只是一个简单的修复,但谁知道呢,对于像我这样的新手来说,Java 似乎相当抽象。无论如何,提前感谢任何答案的家伙:)

【问题讨论】:

标签: java variables button methods call


【解决方案1】:

您只需访问它。不要忘记设置字段final,因为您是从匿名类内部访问它。

JButton btnAdd = new JButton("Add");
final JButton btnSubtract = new JButton("Subtract");

btnAdd.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        int num1 = Integer.parseInt(textField.getText().toString());
        int num2 = Integer.parseInt(textField_1.getText().toString());
        int total = num1 + num2;
        btnSubtract.setEnabled(false);
        JOptionPane.showMessageDialog(null, total); 
    }
});
btnAdd.setBounds(144, 90, 89, 23);
btnSubtract.setBounds(144, 124, 89, 23);

frame.getContentPane().add(btnAdd);
frame.getContentPane().add(btnSubtract);

【讨论】:

  • 谢谢帕特里克。由于您发布了代码,我意识到错误正在发生,因为我在代码中实际创建它之前调用了 btnSubtract.setEnabled(false)。现在我只需要查找如何解决这个问题......
  • 一个容易犯的错误。您可以创建某种扩展MouseAdapter 的操作类,并让该类接受构造函数中执行mouseClicked 事件所需的参数。然后将该类的实例添加为btnAdd 的鼠标侦听器。
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多