2

当我运行它时,JLabel 不可见,但是当我调整窗口大小(使用鼠标)时,会显示 JLabel。为什么?

import javax.swing.*;
import java.awt.*;

public class FrmTaoLogin extends JFrame {

  private JPanel pnlLeft = new JPanel();

  public FrmTaoLogin() {

    super();

    pnlLeft.setBorder(BorderFactory.createEtchedBorder());
    pnlLeft.add(new JLabel("test1"));
    getContentPane().add(pnlLeft,BorderLayout.SOUTH);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(200, 200); 

  }

  public static void main(String[] args) {

    FrmTaoLogin FrmLogin = new FrmTaoLogin();
    FrmLogin.setVisible(true);

  }

}
4

4 回答 4

3

IIRC,当您不调用 Frame.pack() 时会发生这种情况。如果你调用 'pack()' 作为构造函数的最后一行,它应该可以工作。

于 2010-03-27T11:42:41.963 回答
1

我怀疑这里的问题可能与尝试在Swing 线程之外构建和显示您的 GUI 组件有关。

如果您更改main()为在 Swing 线程上调用您的 GUI 代码,像这样呢?

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            FrmTaoLogin FrmLogin = new FrmTaoLogin();
            FrmLogin.setVisible(true);
        }
    });
}
于 2010-03-27T11:47:42.430 回答
0

这看起来像是较新操作系统上较旧 Java VM 中的一些 L&F 错误。例如,在 Windows 7 上,大多数问题首先使用 1.6.0_17 解决。您应该使用控制台启动程序。如果您在事件线程中看到一些堆栈跟踪,那么这是 L&F 错误的问题。

于 2010-03-27T14:08:17.590 回答
0

谢谢大家,问题解决了。我更改了 Windows 主题,一切正常。我认为这是 Windows Aero 和我的 NVIDIA GeForce FX5500 问题。此卡官方不适用于 windows Aero。

于 2010-03-27T15:57:27.630 回答