JButtons的Instanceof,Enum或多个监听器

时间:2013-02-18 16:02:16

标签: java model-view-controller enums actionlistener instanceof

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

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

  1. 创建一个扩展JButton的类'MyButton',然后给它一些Enum,然后我可以创建一个动作监听器,然后通过检查Enum检查ActionListener中哪个按钮被按下。

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

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

  4. 其他

  5. 哪种方法最好?任何建议都会受到极大的欢迎!

3 个答案:

答案 0 :(得分:1)

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

首先是因为这是通常的解决方案。其次,在点击它之间没有理由扩展JButton只做其他事情。这就是ActionListener的作用。 Swing组件按原样设计为使用,您通常不应扩展

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

如果是,那么

  • 如果采用第二种方法,则每次添加新订单项时都需要在操作侦听器内编码。
  • 第三种方法也具有与上述相同的含义

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

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