2010-03-27 124 views
2

當我運行這個時,JLabel是不可見的,但是當我調整窗口大小(用鼠標)JLabel顯示。爲什麼?Java JFrame很奇怪

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); 

    } 

} 
+1

對我來說,你的例子工作正常。 Windows 7 64位上的Java 1.6.0_17 – Midhat 2010-03-27 11:35:27

+2

僅僅爲了添加組件而繼承JFrame是一種糟糕的做法。 – kdgregory 2010-03-27 11:56:01

+0

它也適用於我,這就是爲什麼我懷疑是線程問題。 – 2010-03-27 11:59:33

回答

0

這看起來像一些在以前的Java虛擬機將L &˚F蟲子在較新的操作系統。例如在Windows 7上,大多數問題首先由1.6.0_17解決。你應該用一個控制檯啓動你的程序。如果你在事件線程中看到一些堆棧跟蹤,那麼這是一個L錯誤的問題。

+0

對所有問題,問題解決。我更改Windows主題和所有工作正常。我認爲這是Windows Aero和我的NVIDIA GeForce FX5500問題。此卡官方不與Windows Aero合作。 – rodion 2010-03-27 15:58:20

3

IIRC,當你不調用Frame.pack()時會發生這種情況。如果你把'pack()'作爲構造函數的最後一行,它應該可以工作。

+0

實際上,'setSize()'應該具有調用'pack ()'並迫使框架自行擺脫,不是嗎? – 2010-03-27 11:46:11

+1

'setSize()'只是告訴幀應該是多大;你需要調用'invalidate()'來告訴它重新計算它的組件。然而,調用'pack()'作爲框架構建的最後一步是一個更好的習慣。 – kdgregory 2010-03-27 11:55:32

+0

我回顧一下--setSize()不直接調用'pack()'。但是,OP的代碼在第一次嘗試時爲我工作,而無需調用'pack()'。在setSize()之後向'pack()'添加一個調用實際上具有覆蓋給定大小設置的*不受歡迎*效果,使窗口小於OP希望的200x200。 – 2010-03-27 11:58:36

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); 
     } 
    }); 
} 
+0

with invokeLater我有同樣的效果:( – rodion 2010-03-27 12:12:30

+0

)如果在將所有內容放入Swing線程後仍然存在相同的問題,那麼我會嘗試將組件放在JPanel中,並將JPanel設置爲頂級容器的內容窗格,而不是添加它們直接到頂級容器,就像上面評論中提到的@kdgregory一樣。 – 2010-03-27 12:16:32

+0

Thanx,但它是第一個,我正在嘗試:) – rodion 2010-03-27 12:29:31

0

向所有人問好,問題已解決。我更改Windows主題和所有工作正常。我認爲這是Windows Aero和我的NVIDIA GeForce FX5500問題。此卡官方不與Windows Aero合作。