我目前正在处理一些Java代码,其中定义了很多ActionListener(每个JButton
一个),大约有60个按钮。这些都在JButton.addActionListener
方法中定义为匿名内部类。我一直在想办法重构它,使代码看起来更整洁,因为这使代码看起来很混乱。我考虑过可能将侦听器放入一个单独的类,该类本质上具有大量的静态方法,每个静态方法都返回一个侦听器。这意味着代码看起来像addActionListener(GetActionListener.addActionListener())
。虽然这会使它更整洁,但我觉得这并不是一个很好的解决方案。我以为还有一张静态最终映射图,其中包含带有侦听器名称的KV对和侦听器本身。同样,这似乎仍然不是一个很好的解决方案。我想知道是否有人有什么想法?我还应该说,所有的actionListeners都非常不同。
最佳答案
我建议不要使用ActionListener
直接添加动作。如果以这种方式进行操作,它将变得不可重用。而是将您的操作包装在javax.swing.Action
类中。这样您就可以在任何地方重复使用操作。例如,现在您可以使用相同的动作来表示“复制”动作的菜单快捷方式和工具栏中的“复制”按钮。
基本上,这种想法不是将可运行的操作与GUI元素直接耦合。
现在来问你的问题。我将使用公共方法public repository of actions
在名为ActionRepsoitory的类中创建一个Action getAction(String)
。您的每个动作都将由一个String常量标识,您可以使用该常量从存储库中检索该动作。通常,该字符串将是元素的actionCommand
。如何通过HasMap或其他方式在ActionRepository中管理动作完全取决于您。
这就是大多数专业代码AFAIK的工作方式。