Java布局不显示组件(有时)
问题描述:
我正在为我的学生写一个MathQuiz,包括JLatexMath用于蜂鸣器的渲染和输入。问题在于,有时(如每第四次)当我启动程序时,没有任何组件可见。它们在调整JFrame大小后出现。 首先,我想在jinput或jlatexMath库错误的,但我得到了同样的错误,即使这个最小代码:Java布局不显示组件(有时)
public class Shell extends JFrame{
private JButton button1;
private JButton button2;
private Formula formula;
public Shell() {
super("blaBla");
this.setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
Box b = Box.createHorizontalBox();
button1 = new JButton(" ");
button1.setEnabled(false);
b.add(button1);
b.add(Box.createHorizontalGlue());
button2 = new JButton(" ");
button2.setEnabled(false);
b.add(button2);
add(b);
JPanel formulaPanel = new JPanel();
add(Box.createVerticalStrut(20));
add(formulaPanel);
}
public static void main(String[] args) {
Shell s = new Shell();
}
}
什么是错的,用的代码?
答
首先将setVisible(true);
移动到构造函数的末尾。
而不是在这里...
public Shell() {
super("blaBla");
this.setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
//...
}
移动在这里......
public Shell() {
super("blaBla");
//...
add(Box.createVerticalStrut(20));
add(formulaPanel);
setVisible(true);
}
为了防止其他任何可能的故障的图形,你应该始终启动你的用户界面的从事件中调度线程,请参阅Initial Threads以获取更多详细信息
+0
setVisible在构造函数的最后似乎很好地工作到目前为止。 感谢您的帮助:-) – user3648884 2014-10-31 01:17:42
那么,如果您对Swing有奇怪的问题,最好注意文档并确保所有的[Swing代码在Event Dispatch Threa上执行d。](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html)从那里开始。 – markspace 2014-10-31 01:05:07
好的,thx为快速回答。我添加了 System.out.println(javax.swing.SwingUtilities.isEventDispatchThread()); 给构造函数我在控制台上弄错了。我怎样才能让我的线程EventDispatchThread? – user3648884 2014-10-31 01:12:21
我给你的链接左侧有几个链接。最好阅读所有的文档,否则谁知道你错过了什么。 [尝试此链接,](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html),但您确实需要阅读关于Java中并发性的整个部分。至少。 – markspace 2014-10-31 01:16:56