gpt4 book ai didi

java - 实现 actionPerformed 的最佳方式?

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:50 33 4
gpt4 key购买 nike

在Java中,我们有两种方式来实现actionPerformed:

  1. 每个类一个 actionPerformed 方法:使用 if-else 检查事件源;
  2. 使用匿名内部类并在创建该对象的地方实现 actionPerformed 方法;

对于选项 1,很容易跟踪 actionPerformed 代码的位置,因为每个类只有一个方法。我们可以轻松找到该方法,然后查看内部以找到我们正在寻找的代码。但是,如果我们有很多 Action 监听器,可能会有太多的 if-else 子句。

对于选项2,要找到actionPerformed代码在哪里并不容易,因为它散布在整个类中。如果您有很多 Action 监听器,则跟踪 actionPerformed 实例会更加困难。

我个人更喜欢选项1,因为它更容易维护代码,甚至性能可能不如选项2。

每种方法的优缺点是什么?在选择如何实现 actionPerformed 时还应该考虑什么?你更喜欢哪种方式?

编辑:

所以根据下面 A. Lee 的建议,有第三个选项。它是选项 1 和选项 2 的组合:使用匿名内部类,但将它们一起放在类中的一个位置。我认为这是个好主意。

最佳答案

我认为 actionPerformed 方法中的长 if-else 链很丑陋,原因有几个——您每次都进行不必要的检查以确定哪个是 ActionEvent 的合适接收者代码,并且随着代码的增长它变得越来越难以维护。

如果您想将所有 Action 处理程序放在一个地方,请使用 initializeActionListeners 方法将您的 ActionListeners 绑定(bind)到您的控件。或者将它们绑定(bind)到您初始化它们的位置,以便事件处理程序更接近您的小部件/控件本身,例如,

// not thread-safe
private JLabel getSomeLabel() {
if (someLabel == null) {
someLabel = new JLabel("Some label, huh");
someLabel.addActionListener(...)
}
return someLabel;
}

关于java - 实现 actionPerformed 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859975/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com