Java Layout not showing components (sometimes)

青春壹個敷衍的年華 提交于 2019-12-20 04:23:35

问题


I'm writing a MathQuiz for my pupils including JLatexMath for rendering and jinput for the buzzers. The problem is, that sometimes (like every fourth time) when I start the program, none of the components are visible. They appear after resizing the JFrame. First I was thinking of Bugs in the jinput or jlatexMath libraries, but I do get the same Error even with this minimal Code:

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();
  }
}

What is wrong, with the code?


回答1:


Start by moving setVisible(true); to the end of the constructor.

Instead of been here...

public Shell() {
    super("blaBla");
    this.setSize(800, 600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    //...
} 

Move it here...

public Shell() {
    super("blaBla");
    //...
    add(Box.createVerticalStrut(20));
    add(formulaPanel);
    setVisible(true);
} 

To protect against any other possible graphical glitches, you should always start you UI's from within the Event Dispatching Thread, see Initial Threads for more details



来源:https://stackoverflow.com/questions/26665955/java-layout-not-showing-components-sometimes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!