1

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

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()实现。现在它被称为ok。但是我想将实现放到变量中,并为不同的操作使用两次。如何正确调用?请不要忘记包含此代码的外部也有方法,我不想调用它而不是正确的。AbstractActionListSelectionListenerListSelectionListenersetEnabled()JFramesetEnabled()

提前感谢您的回答。

更新:我不能像这样使用构造,AbstractAction.this.setEnabled(!templatesList.isSelectionEmpty());因为编译器报告错误。

4

2 回答 2

2

我读错了。您可以转向AbstractAction私有非匿名内部类(例如MyAction),然后将其称为MyAction.this

于 2013-04-01T20:46:02.987 回答
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
            }
        });
于 2013-04-01T20:54:12.547 回答