[英]How to address instance of anonymous class from inner anonymous class?
我有一个包含另一个匿名类中的匿名类的代码,我需要从内部匿名类中解决外部匿名类的实例。 这是代码:
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()
。 现在叫做确定。 但是我想将ListSelectionListener
实现放入变量中,并将其两次用于不同的操作。 如何正确调用setEnabled()
? 请不要忘记,外部JFrame
包含此代码也具有setEnabled()
方法,我不想调用它而不是正确的方法。
预先感谢您的回答。
更新:我不能使用像AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty());
这样的构造AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty());
因为编译器报告错误。
我读错了。 您可以将AbstractAction
转换为私有的非匿名内部类(例如MyAction
),然后像MyAction.this
一样调用它。
您应该致电:
AbstractAction.this.setEnabled(!(this.isSelectionEmpty()));
UPDATE
好的,您可以这样进行:
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
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.