启动Simple Java程序会导致白屏暂停

时间:2014-12-18 00:30:35

标签: java swing jframe

我有一个简单的文本程序,并且正在为jframe加载2个JPanels(正文和页脚),一个用于正文的文本区域和一个用于页脚的标签区域。我不确定我的订单是否错误或者我忘记了什么,但是当启动程序导致它闪烁白色时我得到一个滞后。这有点烦人,我想尽可能避免这种情况。有什么想法吗?


这应该是它应该是什么样子但是在开始时它会闪烁白色和手半秒钟。 我尝试将帧背景设置为蓝色,但这并没有改变任何东西。

hangs here should look like this...

    JFrame frame = new JFrame("SIMPLE TEXT");
    JPanel panel = new JPanel();
    JTextArea textarea = new JTextArea();
    JPanel footer = new JPanel();       
    JLabel linecol = new JLabel("line: 0 col: 0");

    frame.setSize(640,480);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setResizable(false);

    panel.setSize(frame.getBounds().width, frame.getBounds().height);
    panel.setBackground(bgColor);
    panel.setForeground(fgColor);
    panel.setLayout(new BorderLayout());

    footer.setSize(640,20);
    footer.setBackground(bgColor);
    footer.setLayout(new BorderLayout());
    footer.setBorder(new EmptyBorder(0,0,0,10));

    textarea.setSize(400, 400);
    textarea.setOpaque(false);
    textarea.setForeground(fgColor);
    textarea.setCaretColor(fgColor);


    linecol.setForeground(fgColor); 


    frame.add(panel);
    panel.add(footer, BorderLayout.PAGE_END);
    panel.add(textarea);
    footer.add(linecol, BorderLayout.LINE_END);

1 个答案:

答案 0 :(得分:2)

获取此frame.setVisible(true);并将其移至建立屏幕后调用的列表命令

JFrame frame = new JFrame("SIMPLE TEXT");
JPanel panel = new JPanel();
JTextArea textarea = new JTextArea();
JPanel footer = new JPanel();       
JLabel linecol = new JLabel("line: 0 col: 0");

//frame.setSize(640,480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setLocationRelativeTo(null);
//frame.setVisible(true);
//frame.setResizable(false);

//...

frame.add(panel);
panel.add(footer, BorderLayout.PAGE_END);
panel.add(textarea);
footer.add(linecol, BorderLayout.LINE_END);

frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

您还会发现,使用setSize尝试调整组件的大小是毫无意义的(并且非常气馁),因为框架和面板在布局管理器的控制之下......

另外要注意,setResizable可以更改框架边框的大小,这需要在尝试调整窗口大小和/或位置之前调用。

<强>更新

正如Andrew Thompson所建议的那样,您应该使用JTextArea(int, int)为布局管理器提供大小调整提示。如果您将JTextArea置于JScrollPane范围内,也可能会发现{{1}}更有用。有关详细信息,请参阅How to Use Scroll Panes