如何使用通用枚举实现动作侦听器?

时间:2019-05-27 02:59:55

标签: java swing actionlistener jcheckbox

我正在重构我的应用程序,我的老师建议我用更通用的代码替换GUI构建器生成的代码。

现在,每个JMenuItem都有自己的动作监听器。我想要实现的是通过在单个动作侦听器中使用枚举来为每个菜单项提供一种通用控制功能。下面的代码应该给您一个总体思路。 clE是枚举关键字,我相信枚举应该实现一个接口以读取其标签。

我一直在做一些研究,我敢肯定这很简单,但是我还不能完全掌握它。提前致谢!

public class JECheckBox<E extends ENUM_Label_INTF<?>> extends JCheckBox {

     private final E clE;

     // +++++++ CONSTRUCTOR +++++++++
     public JECheckBox(final E clE) {
         super( ((GetLabelINTF) clE).GetLabel() );
         this.clE = clE;
     }

     public E GetKey() {
         return clE;
     }
}

2 个答案:

答案 0 :(得分:1)

  

我相信枚举应实现一个用于读取其标签的接口。

如果您想阅读复选框的文本,则可以通过执行以下操作来创建通用侦听器:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        JCheckBox checkbox = (JCheckBox)e.getSource();
        System.out.println( checkbox.getText() );
    }
};

现在,您可以将“操作”添加到每个复选框。

请注意,Action是功能更丰富的ActionListener。阅读有关How to Use Actions的Swing教程中的部分,以获取更多信息和示例。

答案 1 :(得分:0)

不要理解通用枚举的含义。尝试使用component.setName(SomeEnum.soneValue.toString())为每个菜单项(或任何组件)赋予其自己的名称。然后在动作侦听器中获取名称,然后进行切换(SomeEnum.valueOf(name)。