gpt4 book ai didi

java - 更改操作监听器内 Java 窗口对象的属性

转载 作者:行者123 更新时间:2023-11-30 03:56:30 24 4
gpt4 key购买 nike

我一直在 Eclipse 中使用 WindowBuilder,并向按钮 (btn1) 添加了一个操作监听器。

我希望将另一个按钮 (btn2) 的“Enabled”属性设置为 true。

我目前拥有的代码是:

JButton btn1 = new JButton("Enable btn2");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
btn2.setEnabled(true);
}
});
toolBar.add(btn1);

JButton btn2 = new JButton("Click btn1!");
btn2.setEnabled(false);
toolBar.add(btn2);

(上面的代码位于名为 toolBar 的工具栏内)。

唯一的问题是,我想在 btn1 中运行 actionPerformed() 代码,但它不允许我与 btn2 交互。我尝试将代码放在 btn2 的声明之后,但仍然出现以下编译错误:

Cannot refer to a non-final variable btnStop inside an inner class defined in a different method

如何与 btn2 按钮交互?

最佳答案

您可以按照错误消息告诉您的操作:使 btn2 成为最终局部变量:

final JButton btn2 = new JButton("Click btn1!");

你的问题是你试图操作内部类内部的局部变量,除非该变量被声明为final,否则这是不允许的。局部变量被复制然后传递到内部类中,如果它们不是最终的,则局部变量可能会更改值(这里意味着它将引用另一个 JButton),并且内部类的变量表示不会改变随之改变。

另一种选择是将 btn2 声明为私有(private)非静态类字段。

<小时/>

编辑
正如 @AaronDavidson 在评论中所说:

final means the variable won't ever change, which means it is safe for the anonymous inner class to keep a reference to the object, and later when the callback is executed, the reference will still be valid.

关于java - 更改操作监听器内 Java 窗口对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23045715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com