有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

关于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)如果创建对象更好,如果我不再使用该对象,如何从内存中删除该对象


共 (2) 个答案

  1. # 1 楼答案

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

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

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

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

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

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

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

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

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

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