1

在我的摇摆 GUI 上,我有数据行和许多按钮,用户选择了许多项目,然后选择了一个按钮。

每个按钮对数据应用不同的规则,因此需要为每个按钮调用不同的函数,我使用的是 MVC 设计模式,我的问题是,我应该如何处理每个按钮的不同需求?

  1. 创建一个扩展 JButton 的类“MyButton”,然后给它某种枚举,然后我可以创建 1 个动作侦听器,然后通过检查枚举来检查在 ActionListener 中按下了哪个按钮。

  2. 与上面类似,但每个按钮都有不同的类,然后使用 instanceof 来确定哪个按钮被按下。

  3. 为每个按钮实现一个单独的 ActionListener

  4. 其他?

如果有的话,哪种方法最好使用?任何建议都会受到极大的欢迎!

4

3 回答 3

1

为每个按钮实现一个单独的监听器。

首先,因为这是通常的解决方案。其次,没有理由扩展 JButton 只是为了在单击它时执行其他操作。这就是 ActionListener 的作用。Swing 组件设计为按原样使用,通常不应扩展它们。

于 2013-02-18T16:06:48.623 回答
0

它是 MVC:您将逻辑(在 Actions 中)和视图(按钮)分开。

无需使用枚举或子类化 JButton。当你有几十个按钮时,你可以做些什么来保持干净,是一个工厂类来创建 Action 实例。

于 2013-02-18T16:09:48.343 回答
0

如果我正确地回答了您的问题,您的意思是说,您在订单项中有一个数据,并且每个订单项都有一个按钮,按下该按钮会调用与订单项有关的规则。

如果是这样,那么

  • 如果您采用第二种方法,您需要在以后每次添加新的行项目时在您的操作侦听器中进行编码。
  • 第三种方法也将具有与上述相同的含义

第一种方法听起来不错。你可以有一个工厂,它可能有一个以枚举变量和相应规则为键的哈希映射。在动作侦听器内部从工厂获取规则并调用它。

通过这种方式,您可以获得适当的关注点分离,并且您的动作侦听器将充当控制器,不了解规则和数据项。

于 2013-02-18T16:13:19.777 回答