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

おかげさまで、問題は解決しました。Windowsのテーマを変更すると、すべて正常に動作します。それがWindowsAeroと私のNVIDIAGeForceFX5500の問題だと思います。このカードの担当者は、WindowsAeroを使用していません。

于 2010-03-27T15:57:27.630 に答える
0

これは、新しいOS上の古いJava VMのL&Fバグの一部のように見えます。たとえば、Windows 7では、ほとんどの問題は1.6.0_17で最初に解決されます。プログラムはコンソールから開始する必要があります。イベントスレッドにいくつかのスタックトレースが表示される場合は、L&Fバグの問題です。

于 2010-03-27T14:08:17.590 に答える