Java JFrame非常奇怪

时间:2010-03-27 11:28:15

标签: java swing jframe jlabel

当我运行它时,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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

如果你更改main()以在Swing线程上调用你的GUI代码怎么办?

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            FrmTaoLogin FrmLogin = new FrmTaoLogin();
            FrmLogin.setVisible(true);
        }
    });
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

感谢所有人,问题解决了。我改变Windows主题,一切正常。我认为这是Windows Aero和我的NVIDIA GeForce FX 5500问题。这张卡官方没有使用Windows Aero。