我有一个代码在另一个匿名类中包含匿名类,我需要从内部匿名类中解决外部匿名类的实例。这是代码:
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
}
});
因此,我在setEnabled()
的实现中调用了AbstractAction
ListSelectionListener
的实现。现在它被称为好。但我想将ListSelectionListener
的实现放到变量中,并将其用于不同的操作两次。如何正确拨打setEnabled()
?请不要忘记外部JFrame
包含此代码也有setEnabled()
方法,我不想将其称为正确的。
提前感谢您的回答。
更新:我无法使用AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty());
之类的构造,因为编译器会报错。
答案 0 :(得分:2)
AbstractAction
转换为私有非匿名内部类(例如MyAction
),然后将其称为MyAction.this
答案 1 :(得分:0)
你应该致电:
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
}
});