【问题标题】:Is there a more efficient way to handle button click events than several if statements?有没有比几个 if 语句更有效的方法来处理按钮单击事件?
【发布时间】:2014-05-01 01:17:06
【问题描述】:

所以,我会尽力解释这个问题......

基本上,我有一个 GUI,其主窗口上有几个按钮(可能大约 10 个)。我将按钮本身放在一个数组中,但是在处理每个按钮的点击事件时,会发生不同的事情,具体取决于点击哪个按钮。

而不是做这样的事情:

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Button1Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ }
}

有没有更有效的方法来处理每个按钮被点击时的响应?这个想法是,每当单击按钮时,都会打开一个新窗口,让用户执行与该按钮相关的各种任务。我正在考虑以某种方式将getActionCommand()Class.forName()/newInstance() 方法结合使用,但我不确定是否有另一种(或更简单)的方法来做这样的事情。

【问题讨论】:

  • 我可能会让自己看起来很愚蠢,但你为什么不给每个 Button 分配它自己的 ActionListener?

标签: java swing jbutton actionlistener class-design


【解决方案1】:

您展示的 ActionListener 有时被称为“交换机侦听器”,您认为可以对其进行改进是正确的。它是相当死板的代码,难以调试和增强。

我认为最好不要让 GUI 实现 ActionListener,而是为每个 class 按钮使用唯一的 Actions(即 AbstractActions),然后将适当的 Action 插入适当的按钮.要以最小的耦合插入,请考虑使用依赖注入,例如 Spring 或 Guice。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2020-03-19
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多