提问者:小点点

在内部类中定义按钮动作Vs在摇摆中定义公共类中的按钮动作


我有一个对话框,有四个按钮,分别是新建、保存、删除、取消。现在每个按钮都需要执行它们的操作。所以我定义了一个单独的类来实现一个ActionListener。我使用这个类来执行每个按钮操作。

public class MyClass implements ActionListener {
  public void actionPerformed(ActionEvent e) { 
   if(e.getActionCommand().toString() == "OK") {
        // Code
   } else if( .. ){

   }
  }
}

我所做的是,我定义了一个内部类,我曾经做过同样的功能。但是我没有得到的是,最好的做法是写一个单独的类还是最好使用内部类。有人建议我写在公共类中,这样明天有人可以使用这个类来执行他们的操作。所以我有以下问题,

>

  • 如果功能没有被任何对象调用(我不能说),那么我可以在内部类中编写它?或者

    总是编写执行该对话框操作的内部类是一种好的做法吗?


  • 共3个答案

    匿名用户

    这些问题没有一般的答案。如果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值中进行比较