我有一个对话框,其中有四个按钮,分别为“新建”,“保存”,“删除”,“取消”。现在,每个人都需要执行他们的行动。所以我定义了一个实现ActionListener
的单独类。我已经使用这个类来执行每个按钮操作。
public class MyClass implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().toString() == "OK") {
// Code
} else if( .. ){
}
}
}
我所做的是,我定义了一个我用来做同样功能的内部类。但是我没有得到的是,最好的做法是编写一个单独的类,还是最好使用内部类。我被建议在公共课上写,所以明天有人可以用这个课来表演他们的行动。所以我有以下问题,
如果任何对象都没有调用该功能(我不能说)那么我可以在内部类中编写它吗? OR
总是编写执行该对话框操作的内部类是一个好习惯吗?
答案 0 :(得分:6)
当你谈到为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回调的复杂性增加到值得一个单独的类,我就会开始寻找重构的地方。
答案 1 :(得分:6)
这些问题没有一般答案。如果actionPerformed()
中的代码是一行,那么编写整个类文件通常会有点过分。
如果代码更复杂,它可能适合重用,但随着代码的增长,它也会变得更具体(因此您不能再重复使用它)。
尝试遵循这种方法:
因此,在您的情况下,您可以使用辅助方法来完成工作。将它们包裹在Swing Action
s中;这允许您在各种按钮和菜单中使用它们。
尝试尽可能多地将工作移动到帮助程序中,以便操作变得非常简单。如有疑问,请问自己:这段代码是否属于工作?每个人都需要这样做吗?
如果是,那么代码应该进入工作/帮助类。
如果是与UI相关的检查(可见/启用),转换(字符串到数字),验证等等,它应该进入操作。
答案 2 :(得分:2)
正确的方式应该是Swing Action(mentioned in comment by @Robin),JButtons Components作为最具可扩展性的选择,以及有趣方法的实现
最复杂的GUI可以添加EventHandler,which fired event and could be compare in String value