我有一个简单的文本程序,并且正在为jframe加载2个JPanels(正文和页脚),一个用于正文的文本区域和一个用于页脚的标签区域。我不确定我的订单是否错误或者我忘记了什么,但是当启动程序导致它闪烁白色时我得到一个滞后。这有点烦人,我想尽可能避免这种情况。有什么想法吗?
这应该是它应该是什么样子但是在开始时它会闪烁白色和手半秒钟。 我尝试将帧背景设置为蓝色,但这并没有改变任何东西。
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);
答案 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