JavaGUI设计:使用对象还是使用方法?

JavaGUI设计:使用对象还是使用方法?,java,object,user-interface,memory,methods,Java,Object,User Interface,Memory,Methods,关于Java中的GUI设计,我有一个棘手的问题:我们应该使用更多的方法还是更多的对象?举一个非常简单的例子:对话框 对于对话框,我可以使用方法或对象: 使用方法: public static void MakeDialog() { final JFrame frame = new JFrame(); String help = "";//Reader.readhelp(); JTextArea contentArea = new JTextArea(help, 60,

关于Java中的GUI设计,我有一个棘手的问题:我们应该使用更多的方法还是更多的对象?举一个非常简单的例子:对话框

对于对话框,我可以使用方法或对象:

使用方法:

public static void MakeDialog() {
    final JFrame frame = new JFrame();
    String help = "";//Reader.readhelp();

    JTextArea contentArea = new JTextArea(help, 60, 60);
    JScrollPane scroller = new JScrollPane(contentArea);
    scroller.setPreferredSize(new Dimension (650,650));

    JButton close = new JButton("Close");
    close.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent a) {
            frame.dispose();
        }
    });

    JPanel panel = new JPanel();
    panel.add(scroller);
    panel.add(close);

    frame.add(panel);
    frame.setTitle("Help");
    frame.setSize(700, 700);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
然后我只需要调用这个方法,然后显示这个对话框

但是,我可以有另一种方法:创建一个对话框类:

public class MyDialog {

     public MyDialog() {
           final JFrame frame = new JFrame();
    String help = "";//Reader.readhelp();

    JTextArea contentArea = new JTextArea(help, 60, 60);
    JScrollPane scroller = new JScrollPane(contentArea);
    scroller.setPreferredSize(new Dimension (650,650));

    JButton close = new JButton("Close");
    close.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent a) {
            frame.dispose();
        }
    });

    JPanel panel = new JPanel();
    panel.add(scroller);
    panel.add(close);

    frame.add(panel);
    frame.setTitle("Help");
    frame.setSize(700, 700);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     }
}
真正困扰我的问题是:哪一个能更有效地使用内存?对于软件中的一个或两个对话框,这可能根本不是问题。如果我需要处理数百个对话框,我需要考虑可能消耗的内存资源。根据我到目前为止学到的知识,调用该方法比创建MyDialog对象要好,因为一旦处理了该方法,内存就会被释放。但是,如果我不对对象MyObject执行任何操作,它将保留在内存中。我面临的问题是:经过几个小时的开发,我发现我只剩下几MB的内存,我必须退出Eclipse并重新启动计算机以释放内存

因此:

1) 哪一个更好


2) 如果创建对象更好,如果不再使用该对象,如何从内存中删除该对象?

内存使用与此无关。差异大约为20个字节,这将被垃圾收集

重要的是正确的设计。对象的构造函数并不意味着有显示对话框这样的副作用。构造函数的目标是通过初始化其字段来创建具有特定状态的对象,以便以后使用该对象

你的例子做不了这样的事。您将创建一个MyDialog实例,而不使用它。构造函数所要做的就是产生一个巨大的副作用:显示一个对话框

这种设计的另一个缺点是,您使用实例字段来存储一个值,该值实际上是一个常量,不与任何指定的MyDialog实例绑定,并且只与构造函数相关。根本没有理由有这样一个领域


最后,您的方法不遵守Java命名约定:方法以小写字母开头。它应该被命名为
showDialog()
,而不是
makeDialog
,因为它不创建对话框,而是显示一个对话框。

内存使用与此无关。差异大约为20个字节,这将被垃圾收集

重要的是正确的设计。对象的构造函数并不意味着有显示对话框这样的副作用。构造函数的目标是通过初始化其字段来创建具有特定状态的对象,以便以后使用该对象

你的例子做不了这样的事。您将创建一个MyDialog实例,而不使用它。构造函数所要做的就是产生一个巨大的副作用:显示一个对话框

这种设计的另一个缺点是,您使用实例字段来存储一个值,该值实际上是一个常量,不与任何指定的MyDialog实例绑定,并且只与构造函数相关。根本没有理由有这样一个领域


最后,您的方法不遵守Java命名约定:方法以小写字母开头。它应该命名为
showDialog()
,而不是
makeDialog
,因为它不创建对话框,而是显示一个对话框。

我恐怕这个问题太笼统了,无法回答,因为您要问的是GUI设计的所有用例

让我来看看您提到的具体场景,这是一个对话框

令人惊讶的是,在对话框中,Swing最佳实践介于方法和类之间

一方面,在Swing中使用对话框时,最好为包含所有GUI的面板创建一个新类,该类将成为对话框的内容窗格。另一方面,您应该创建一个方法来创建(也可能显示)对话框。在该方法中,您将执行以下操作:

  • 创建一个JDialog实例(通常不需要子类化)
  • 创建自定义面板类的实例(例如MyDialogContentPaneClass)
  • 将面板设置为对话框的内容窗格
  • 显示和/或返回对话框

    • 恐怕这个问题太笼统了,无法回答,因为您要问的是GUI设计的所有用例

      让我来看看您提到的具体场景,这是一个对话框

      令人惊讶的是,在对话框中,Swing最佳实践介于方法和类之间

      一方面,在Swing中使用对话框时,最好为包含所有GUI的面板创建一个新类,该类将成为对话框的内容窗格。另一方面,您应该创建一个方法来创建(也可能显示)对话框。在该方法中,您将执行以下操作:

      • 创建一个JDialog实例(通常不需要子类化)
      • 创建自定义面板类的实例(例如MyDialogContentPaneClass)
      • 将面板设置为对话框的内容窗格
      • 显示和/或返回对话框

      因为
      JOptionPane
      已经是一个现有的类,并且您没有向它添加任何功能,所以第一个(方法)方法可能是更好的方法,因为
      JOptionPane
      已经是一个现有的类,并且您没有向它添加任何功能,所以第一个(方法)方法将是一个更好的方法,简单地说,因为这两个类都是配置
      JOptionPane
      好的,所以我编辑了我的代码。请拿