由于似乎有一些关于什么构成“最佳实践”的争论,我会给你我发现最适合我的东西,以及我的推理:
1. 每个窗口应扩展 JFrame 或 JDialog(取决于窗口的类型)。这样可以轻松控制窗口的属性,而无需每次都指定特定对象。不过,这更像是一般情况,因为众所周知,我以两种方式都这样做。
2. 该方法应位于单独的类中。这增加了能够在其他地方使用窗口类的可能性,因为它们不依赖于特定的实现。从技术上讲,这并没有区别,但应用程序启动代码并不属于窗口。main()
3. 监听器应该在匿名的内部类中。顶级类不应实现任何侦听器。这可以防止黑客攻击,例如从除侦听器方法附加到的对象之外的任何地方调用侦听器方法。
下面是一个具有单个框架的简单应用程序,用于演示这些做法:
public class Main {
public static void main(String[] args) {
final String text = args[0];
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final MyWindow wnd = new MyWindow(text);
wnd.setVisible(true);
}
});
}
}
public class MyWindow extends JFrame {
public MyWindow(String text) {
super("My Window");
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
MyWindow.this.setVisible(false);
MyWindow.this.dispose();
}
});
final JButton btn = new JButton(text);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE);
}
});
setLayout(new FlowLayout());
add(btn);
pack();
}
}