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

标签 java swing jframe

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

<小时/>

它应该是这样的,但一开始它会闪烁白色并闪烁半秒。 我也尝试将框架背景设置为蓝色,但这并没有改变任何东西。

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

最佳答案

获取此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 来尝试调整组件的大小是毫无意义的(并且强烈建议不要这样做),因为框架和面板都在布局管理器的控制之下......

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

已更新

根据 Andrew Thompson 的建议,您应该使用 JTextArea(int, int)向布局管理器提供大小调整提示。如果将 JTextArea 放置在 JScrollPane 中,您可能还会发现它更有用。请参阅How to Use Scroll Panes了解更多详情

关于java - 简单 Java 程序的启动导致白屏暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537307/

相关文章:

java - 何时使用网络服务

java - 使用 GSON 解析多种类型的数组

java - 有没有任何工具可以帮助我将 Java Swing 代码中的数据转换为模板文件?

java - 无法在 JPanel 上绘图

java - 我在 JFrame 中添加容器时遇到问题

java - 使用 JTA 隔离分布式(全局)事务

java - 如何获取构造函数中带有泛型参数的类的构造函数

java - 在一个单元格中添加多个编辑器

java - JFrame 内的 JFrame

Java Swing 线程安全和 EDT