JavaGUI设计:使用对象还是使用方法?
关于Java中的GUI设计,我有一个棘手的问题:我们应该使用更多的方法还是更多的对象?举一个非常简单的例子:对话框 对于对话框,我可以使用方法或对象: 使用方法: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,
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)
- 将面板设置为对话框的内容窗格
- 显示和/或返回对话框
- 创建一个JDialog实例(通常不需要子类化)
- 创建自定义面板类的实例(例如MyDialogContentPaneClass)
- 将面板设置为对话框的内容窗格
- 显示和/或返回对话框
- 恐怕这个问题太笼统了,无法回答,因为您要问的是GUI设计的所有用例
让我来看看您提到的具体场景,这是一个对话框
令人惊讶的是,在对话框中,Swing最佳实践介于方法和类之间
一方面,在Swing中使用对话框时,最好为包含所有GUI的面板创建一个新类,该类将成为对话框的内容窗格。另一方面,您应该创建一个方法来创建(也可能显示)对话框。在该方法中,您将执行以下操作:
JOptionPane
已经是一个现有的类,并且您没有向它添加任何功能,所以第一个(方法)方法可能是更好的方法,因为JOptionPane
已经是一个现有的类,并且您没有向它添加任何功能,所以第一个(方法)方法将是一个更好的方法,简单地说,因为这两个类都是配置JOptionPane
好的,所以我编辑了我的代码。请拿