Swing JComboBox奇怪的行为

时间:2011-12-22 10:32:22

标签: java windows swing jcombobox

我观察到以下行为(在Windows 7平台上):

import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{   
    JPanel p;
    JComboBox<String> l;
    JLabel title;
    public static void main(String[] arg){
      Main m = new Main();
      m.setVisible(true);
      m.setSize(400,400);
      m.p = new JPanel();
      //m.l = new JComboBox<String>();
      m.title = new JLabel("HELLO"); 
      m.p.add(m.title);
      m.setContentPane(m.p);
      }
}

显示HELLO,但是如果我取消注释实例化JComboBox的行,它将不会显示任何内容。可能导致什么?你能重现这个错误吗?

1 个答案:

答案 0 :(得分:2)

我的评论解决方案:

  

最后移动m.setVisible(true);

来自 Jens Schauder的另一条评论

  

您的代码也应该在EDT中运行。还有其他要求   麻烦

可能他想说出这样的话:

处理Swing组件的所有内容,包括构造must run in the EDT。如果没有,它会被打破,尽管你可能没有注意到它。

为此,您可以将逻辑从main方法移动到类的构造函数,并调用构造函数,如下所示:

public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main();
            }
        });
    }

你也可以用其他方法编写逻辑然后构造函数。