簡體   English   中英

為什么在更改組件時必須在我的JFrame上使用setvisible()?

[英]Why do I have to use setvisible() on my JFrame when I change components?

所以為了簡單起見,我設置了一些測試代碼來解決這個問題。 基本上我有一個JFrame ,我向它添加了'this'(我只是從JComponent擴展我的主類以節省時間)。 此組件填充紅色背景。 然后我讓它睡了2秒然后鍵入它。

f.remove(this);
thing t = new thing();
f.add(t);
f.setVisible(true);

f是我的JFrame對象,'thing'只是另一個擴展JComponent類,用於繪制藍色背景。

當我注釋掉setvisible()它不再變為藍色..我嘗試過使用t.setVisible(true)但似乎我必須再次使框架可見,而不是組件

有誰知道我為什么要打電話...或者是否有另一種方法來改變單幀內的組件?

“基本上我有一個JFrame,我向它添加'this'(我只是從JComponent擴展我的主類以節省時間)。這個組件填充紅色背景。然后我讓它睡2秒然后鍵入它。”

  1. 不要“睡覺”你的程序。 而是使用java.swing.Timer在GUI或動畫上執行重復任務。 有關如何使用擺動計時器的更多信息,請參閱。 你可以 這里這里這里這里這里這里看到一堆Timer例子

  2. 而不是嘗試添加和刪除面板,而是使用CardLayout ,它允許您在視圖之間切換。 它可以幫助您避免添加和刪除components/containers出現的許多問題。 有關如何使用CardLayout的更多信息,請參閱。 另請參見此處的簡單示例。

  3. 要回答您的主要問題,每當您從框架中刪除和添加組件時,都需要revalidate()它。 setVisible()為你處理。


邊注

  • 似乎很多添加刪除背景面板)只是為了改變背景。 為什么不只是setBackround() 您可以使用Timer切換顏色

調用setVisible(true)會使幀出現在屏幕上。 有時您可能會看到使用show方法。 這兩個用法是等價的,但我們使用setVisible(true)來保持一致性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM