我有一个对话框,有四个按钮,分别是新建、保存、删除、取消。现在每个按钮都需要执行它们的操作。所以我定义了一个单独的类来实现一个ActionListener
。我使用这个类来执行每个按钮操作。
public class MyClass implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().toString() == "OK") {
// Code
} else if( .. ){
}
}
}
我所做的是,我定义了一个内部类,我曾经做过同样的功能。但是我没有得到的是,最好的做法是写一个单独的类还是最好使用内部类。有人建议我写在公共类中,这样明天有人可以使用这个类来执行他们的操作。所以我有以下问题,
>
如果功能没有被任何对象调用(我不能说),那么我可以在内部类中编写它?或者
总是编写执行该对话框操作的内部类是一种好的做法吗?
这些问题没有一般的答案。如果actionPerform()
中的代码是一行,那么编写整个类文件通常是矫枉过正。
如果代码更复杂,它可能适合重用,但随着代码的增长,它也变得更加具体(因此您不能再重用它)。
尝试遵循这种方法:
因此,在您的情况下,您可以使用帮助方法来完成工作。将它们包装在SwingAction
中;这允许您在各种按钮和菜单中使用它们。
尝试将尽可能多的工作移入帮助程序中,使操作变得非常简单。如果有疑问,问问自己:这段代码是工作的一部分吗?每个人都需要这样做吗?
如果是,那么代码应该进入工作/助手类。
如果是UI相关检查(可见/启用)、转换(字符串到数字)、验证等。,它应该进入操作。
当你谈到为GUI侦听器定义内部类时,我立即想到使用匿名类来完成这项工作:
newButton.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// do the work for a button press
}
});
// similarly for save, cancel, delete buttons:
saveButton.addActionListener(
new ActionListener()
{
// ...
您会经常看到这一点,我经常在自己的代码中使用它。
您使用的取决于代码的结构,例如:
如果每个处理程序都很短(例如,只有一个方法调用,所有真正的工作都在另一个类方法中处理),我会这样使用匿名类。但它看起来确实很傻:不幸的是java要求我们定义一个对象来使用回调方法。
这也是个人偏好和编码风格的问题。
然而,我很少像你的例子中那样为GUI处理程序创建一个新的顶级类:即使我将类分离出来,以便为每个按钮使用相同的类,我也会在控制按钮的类文件中定义类,要么是非公共的顶级类,要么是内部(非匿名)类。如果GUI回调的复杂性增长到需要一个单独的类,我会开始寻找重构的地方。
>
正确的方式应该是Swing Action(在@Robin的评论中提到),对于JButton组件来说,它是最可扩展的选择,具有有趣方法的实现
最复杂的GUI是有办法添加EventHandler,它会触发事件,并且可以在String值中进行比较