我对Java中的GUI设计有一个noobie问题:我们应该使用更多方法还是更多对象?举一个非常简单的例子:对话框。
对于对话框,我可以使用方法或使用对象:
使用方法:
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)如果创建对象更好,如果我不再使用它,如何从内存中删除该对象?
答案 0 :(得分:4)
内存使用与此无关。差异将是大约20个字节,这将是垃圾收集。
重要的是正确的设计。对象的构造函数不具有显示对话框等副作用。构造函数的目标是通过初始化其字段来创建具有特定状态的对象,以便稍后使用该对象。
你的例子并没有做那样的事情。您将创建一个MyDialog实例,并且不执行任何操作。所有构造函数都会产生巨大的副作用:显示一个对话框。
此设计中的另一个不好之处在于,您使用实例字段来存储实际上是常量的值,而不是绑定到任何特定的MyDialog实例,并且仅与构造函数相关。完全没有理由拥有这样的领域。
最后,您的方法并不尊重Java命名约定:方法以小写字母开头。它应该被命名为showDialog()
而不是makeDialog
,因为它不会创建一个对话框,但会显示一个对话框。
答案 1 :(得分:1)
我担心这个问题有点过于笼统,因为您要询问GUI设计的任何和所有用例。
让我来谈谈您提到的具体情况,即对话框。
令人惊讶的是,对于对话框而言,被认为是Swing的最佳实践,它位于方法和类之间。
在Swing中使用对话框时,一方面,最好的做法是为包含所有GUI的面板创建一个新类,它将成为对话框的内容窗格。另一方面,您应该创建一个将创建(并可能还显示)对话框的方法。在该方法中,您将执行以下操作: