繁体   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