Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Java程序的启动会导致白屏暂停_Java_Swing_Jframe - Fatal编程技术网

简单Java程序的启动会导致白屏暂停

简单Java程序的启动会导致白屏暂停,java,swing,jframe,Java,Swing,Jframe,我有一个简单的文本程序,正在加载带有两个JPanel(body和footer)的jframe,一个用于body的文本区域和一个用于footer的标签。我不确定我的命令是否错误,或者我忘记了什么,但我在启动程序时出现了延迟,导致程序闪烁为白色。这有点烦人,如果可能的话,我想避免这种情况。有什么想法吗 这是它应该看起来的样子,但在开始时它会眨白色的眼睛,并用手眨半秒钟。 我也试着将框架背景设置为蓝色,但这并没有改变任何事情 JFrame frame = new JFrame("SIMPLE

我有一个简单的文本程序,正在加载带有两个JPanel(body和footer)的jframe,一个用于body的文本区域和一个用于footer的标签。我不确定我的命令是否错误,或者我忘记了什么,但我在启动程序时出现了延迟,导致程序闪烁为白色。这有点烦人,如果可能的话,我想避免这种情况。有什么想法吗


这是它应该看起来的样子,但在开始时它会眨白色的眼睛,并用手眨半秒钟。 我也试着将框架背景设置为蓝色,但这并没有改变任何事情

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


将此
frame.setVisible(true)设为:
并将其移动到构建屏幕后调用的list命令

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
尝试调整组件的大小是毫无意义的(并且非常不鼓励),因为框架和面板在布局管理器的控制下

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

已更新


正如Andrew Thompson所建议的,您应该使用来向布局管理器提供大小调整提示。如果将
JTextArea
放在
JScrollPane
中,您可能会发现它更有用。有关更多详细信息,请参见

call setvisible at end“您还将发现,使用
setSize
尝试调整组件大小是毫无意义的……”从这个想法出发,最好更改
JTextArea textarea=new JTextArea()类似于
jtextareatextarea=newjtextarea(5,30)
向布局管理器建议尺寸。@andrewhompson非常好的建议!