Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从内部匿名类寻址匿名类的实例?_Java - Fatal编程技术网

Java 如何从内部匿名类寻址匿名类的实例?

Java 如何从内部匿名类寻址匿名类的实例?,java,Java,我有一个在另一个匿名类中包含匿名类的代码,我需要从内部匿名类中寻址外部匿名类的实例。代码如下: editTemplateButton.setAction(new AbstractAction("Edit...", GUIUtils.EDIT_ELEMENT_ICON) { { setEnabled(false); // disabled at start templatesList.addLi

我有一个在另一个匿名类中包含匿名类的代码,我需要从内部匿名类中寻址外部匿名类的实例。代码如下:

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()。现在叫ok。但我想把
ListSelectionListener
的实现放到变量中,并在不同的操作中使用它两次。如何正确调用
setEnabled()
?请不要忘记,outer
JFrame
包含此代码也是have
setEnabled()
方法,我不想调用它而不是正确的方法

提前谢谢你的回答


更新:我不能使用像
AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty())这样的构造我读错了。您可以将
AbstractAction
转换为一个私有的非匿名内部类(例如
MyAction
),然后像
MyAction那样调用它。这个

您应该调用:

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
            }
        });

这是编译器错误,因为AbstractAction不是封闭类。好的,谢谢。这就是答案。但我会考虑这个解决方案的总体架构…)