定义内部类中的按钮操作Vs在swing中定义公共类中的按钮操作

Ama*_*ath 3 java swing jbutton actionlistener

我有一个对话框,它有四个按钮,分别是New,Save,Delete,Cancel.现在,每个人都需要执行他们的行动.所以我定义了一个实现了一个单独的类ActionListener.我已经使用这个类来执行每个按钮操作.

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

   }
  }
}
Run Code Online (Sandbox Code Playgroud)

我所做的是,我定义了一个内部类,我曾经用它来做同样的功能.但是我没有得到的是,最好的做法是编写一个单独的类,还是最好使用内部类.我被建议在公共课上写,所以明天有人可以用这个课来表演他们的行动.所以我有以下问题,

  1. 如果任何对象都没有调用该功能(我不能说)那么我可以在内部类中编写它吗?要么

  2. 总是编写执行该对话框操作的内部类是一个好习惯吗?

pb2*_*b2q 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()
    {
        // ...
Run Code Online (Sandbox Code Playgroud)

你会经常看到这个,我经常在我自己的代码中使用它.

您使用的具体取决于代码的结构,例如:

  • 每个听众需要做多少工作
  • 处理程序之间共享多少代码

如果每个处理程序都很短(例如只有一个方法调用,所有实际工作都在另一个类方法中处理),我将以这种方式使用匿名类.但它确实看起来很傻:不幸的是,java要求我们定义一个对象来使用回调方法.

这也是个人偏好和编码风格的问题.

但是,我很少像你的例子那样为GUI处理程序创建一个新的顶级类:即使我将类分离出来以便我为每个按钮使用相同的类,我也会在类文件中定义类控制按钮,作为非公共顶级类,或作为内部(非匿名)类.如果GUI回调的复杂性增长到值得一个单独的类,我就会开始寻找重构的地方.


Aar*_*lla 6

这些问题没有一般答案.如果代码actionPerformed()是一行,写一个完整的类文件通常是矫枉过正.

如果代码更复杂,它可能适合重用,但随着代码的增长,它也会变得更具体(因此您不能再重复使用它).

尝试遵循这种方法:

  • 从彼此独立的简单块构建应用程序.
  • 通过编写连接块的代码来配置应用程序.

因此,在您的情况下,您可以使用辅助方法来完成工作.总结他们在摇摆Action小号 ; 这允许您在各种按钮和菜单中使用它们.

尝试将尽可能多的工作移动到帮助程序中,以便操作变得非常简单.如有疑问,请问自己:这段代码是否属于工作?每个人都需要这样做吗?

如果是,那么代码应该进入工作/帮助类.

如果它是与UI相关的检查(可见/启用),转换(字符串到数字),验证等,它应该进入操作.