2

有没有办法获得我们以这种方式声明的属性值?

JButton button = new javax.swing.JButton(){
    public int value=0;
}

button.addActionListener(listener);
//in action listener
public void ActionPerformed(ActionEvent evt){

JButton btn = (JButton)evt.getSource();
btn.value =2; //error
}
4

2 回答 2

4

您不能访问实例本身之外的匿名类的属性/方法。

原因是编译器知道这btn是一个 JButton,而不是您的扩展,并且您不能强制转换为该扩展,因为它没有名称。

您需要在单独的文件中创建一个内部类或类并实例化它,例如:

static class MyButton extends JButton {
    public int value=0;
}

// ....
MyButton btn = new MyButton();
btn.addActionListener(listener);
// ....

@Override public void actionPerformed(ActionEvent evt){
    MyButton btn = (MyButton)evt.getSource();
    btn.value = 2; 
}
于 2012-05-04T14:57:45.647 回答
0

您可以做的是使用 Component.setName() 至少与您的组件一起保存一个字符串。

于 2012-05-04T14:58:32.193 回答