[英]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.