Java JFrame,不会立即显示内容,但会在最小化+恢复后显示

时间:2015-03-29 01:36:52

标签: java swing

public class GUI extends JFrame implements ActionListener {
   ...//some global variables
  public GUI ()
  {
    super("Closest Word Automaton");
    this.setSize(1000, 640);
    this.setVisible(true);
    this.setResizable(false);
    this.setLocationRelativeTo(null);
    this.setLayout(new CardLayout());

    initArray();

    JTabbedPane tabs = new JTabbedPane();
    tabs.add("Edit View", createEditView());
    tabs.add("Automaton View", createAutomatonView());
    tabs.add("Levenshtein Distance Calculator", createLevCalculator());
    this.add(tabs);

    addListener();

  }

我的JFrame有一个奇怪的问题,当我在Eclipse中运行程序时,GUI显示如下:http://i.imgur.com/hNtucMo.jpg这不应该发生,因为它看起来像这样:http://i.imgur.com/ph0TV3C.jpg但是我最小化然后恢复Jframe窗口后问题自我修复。为什么会发生这种情况?如何在启动程序时立即正确显示GUI?

(问题也发生在其他计算机上)

1 个答案:

答案 0 :(得分:3)

添加完所有组件后,将框架设置为可见。

public class GUI extends JFrame implements ActionListener {
   ...//some global variables
  public GUI ()
  {
    super("Closest Word Automaton");
    this.setSize(1000, 640);
    this.setResizable(false);
    this.setLocationRelativeTo(null);
    this.setLayout(new CardLayout());

    initArray();

    JTabbedPane tabs = new JTabbedPane();
    tabs.add("Edit View", createEditView());
    tabs.add("Automaton View", createAutomatonView());
    tabs.add("Levenshtein Distance Calculator", createLevCalculator());
    this.add(tabs);

    this.pack();
    this.setVisible(true);  //setVisible to true after adding components

    addListener();
  }

注意我也打电话给this.pack()。这将使JFrame的大小正确,因此也可以正确调整其子组件的大小,因此当setVisible(true)它将正确显示时。