如何从内部匿名类中解决匿名类的实例?

时间:2013-04-01 20:42:46

标签: java

我有一个代码在另一个匿名类中包含匿名类,我需要从内部匿名类中解决外部匿名类的实例。这是代码:

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());之类的构造,因为编译器会报错。

2 个答案:

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