Java 如何从内部匿名类寻址匿名类的实例?
我有一个在另一个匿名类中包含匿名类的代码,我需要从内部匿名类中寻址外部匿名类的实例。代码如下:Java 如何从内部匿名类寻址匿名类的实例?,java,Java,我有一个在另一个匿名类中包含匿名类的代码,我需要从内部匿名类中寻址外部匿名类的实例。代码如下: editTemplateButton.setAction(new AbstractAction("Edit...", GUIUtils.EDIT_ELEMENT_ICON) { { setEnabled(false); // disabled at start templatesList.addLi
editTemplateButton.setAction(new AbstractAction("Edit...", GUIUtils.EDIT_ELEMENT_ICON)
{
{
setEnabled(false); // disabled at start
templatesList.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
setEnabled(!templatesList.isSelectionEmpty()); // depends on selection
}
});
}
@Override
public void actionPerformed(ActionEvent e)
{
//todo
}
});
因此,我在ListSelectionListener
的实现内部调用AbstractAction
实现的setEnabled()。现在叫ok。但我想把ListSelectionListener
的实现放到变量中,并在不同的操作中使用它两次。如何正确调用setEnabled()
?请不要忘记,outerJFrame
包含此代码也是havesetEnabled()
方法,我不想调用它而不是正确的方法
提前谢谢你的回答
更新:我不能使用像AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty())这样的构造因为编译器报告错误。我读错了。您可以将AbstractAction
转换为一个私有的非匿名内部类(例如MyAction
),然后像MyAction那样调用它。这个您应该调用:
AbstractAction.this.setEnabled(!(this.isSelectionEmpty()));
更新
好的,你可以这样做:
final AbstractAction[] action = new AbstractAction[1];
editTemplateButton.setAction(action[0]=new AbstractAction("Edit...", GUIUtils.EDIT_ELEMENT_ICON)
{
{
setEnabled(false); // disabled at start
templatesList.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
action[0].setEnabled(!templatesList.isSelectionEmpty()); // depends on selection
}
});
}
@Override
public void actionPerformed(ActionEvent e)
{
//todo
}
});
这是编译器错误,因为AbstractAction不是封闭类。好的,谢谢。这就是答案。但我会考虑这个解决方案的总体架构…)