簡體   English   中英

如何從內部匿名類尋址匿名類的實例?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM