首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中禁用JButton的问题

在Java中禁用JButton的问题
EN

Stack Overflow用户
提问于 2011-01-30 17:04:31
回答 2查看 324关注 0票数 2

日安!

我想在单击按钮后将其禁用。我的代码如下..

代码语言:javascript
复制
for (char buttonChar = 'a'; buttonChar <= 'z'; buttonChar++) {
        String buttonText = String.valueOf(buttonChar);
        JButton letterButton = new JButton(buttonText);
        letterButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String actionCommand = e.getActionCommand();
                System.out.println("actionCommand is: " + actionCommand);
                letterButton.setEnabled(false);    //I disable the button here
            }
});

但是出现了一个错误:local variable letter Button is accessed from the inner class; needs to be declared final..什么意思?我如何解决这个问题?谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-30 17:07:03

它实际上与禁用按钮无关,而是访问对按钮的引用。

您需要将letterButton声明为final。也就是说,从

代码语言:javascript
复制
JButton letterButton = new ...

到这个

代码语言:javascript
复制
final JButton letterButton = new ...

这里有一个很好的解释为什么它需要是最终的:Why inner class can access only final variable?

原因基本上是这样的:你的局部变量不能被其他线程触及。ActionListener的代码可能会由另一个线程执行。通过将变量设置为final,基本上可以将其转换为一个值。然后,该值可以由多个线程并发读取。

票数 2
EN

Stack Overflow用户

发布于 2011-01-30 17:22:54

代码语言:javascript
复制
JButton letterButton 

应该是final,因为在匿名类中只有final变量或类字段(private/public)可访问。看一看this topic

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4842055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档