当我运行它时,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);
}
}
答案 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。