我最近开始学习如何在Java中使用Swing和图形,并且遇到了两种不同的GUI设计方法。
1)让程序的main方法在JFrame类的实例化中。
2)要有一个在main方法结束时调用SwingUtilities.invokeLater()的类,以延迟处理图形的线程,直到main方法初始化为止。
e.g。 1。
class program extends JFrame {
public static void main(String[] args) {....}
}
e.g。 2。
class program implements Runnable {
public static void main() {
program p = new program();
SwingUtilities.invokeLater(p);
}
public void run() { ... }
}
如方法2那样使程序线程安全有多重要?另外,每种方法的优点和缺点是什么?即你什么时候使用一种方法而不是另一种?等
答案 0 :(得分:3)
我遇到了简单的Swing应用程序,如果没有在Swing事件线程上启动就完全失败,这在我设置外观时首先发生。除非在Swing事件线程上启动GUI,否则在任何情况下都无法保证正确运行,因此对于一般的Swing建议,我建议
getPreferredSize()
。您可以通过让类扩展JFrame来强迫自己在角落里绘制,迫使您创建和显示JFrame,这通常需要更多的灵活性。更常见的是,您的GUI类将面向创建JPanels,然后可以将其放置到JFrames或JDialogs或JTabbedPanes中,或者在需要时通过CardLayouts交换。这将大大提高GUI编码的灵活性。你也永远不想直接在JFrame中绘图,因为这可能会错误地绘制其中一个关键组件,但经常在JPanel中绘制,特别是在做动画时,为此你需要扩展JPanel。