2012-10-12 75 views
5

我有一個與Java有關的普遍問題。如何刷新Java中的GUI?

我在寫一個具有GUI菜單的應用程序。我試圖根據單選按鈕的選擇更改GUI菜單的一部分。

我需要:

  1. 重繪整個窗口或只需要更新的那部分:

    setVisible(true)? 
    
  2. 如果我只是使用的語句從#1以上。該GUI是罰款 - 直到我將鼠標移到它上面,然後我看到上一個按鈕的選擇。我究竟做錯了什麼?

+0

我認爲有一個paint()方法 – amphibient

+0

repaint()可能是你wnat – jozefg

+0

我只是嘗試repaint()方法,它根本不起作用。我嘗試setVisible(true)以及那也沒有工作。 – ironmantis7x

回答

6

Swing組件具有repaint(),revalidate()和doLayout()方法。其中一個應該可以重新繪製你想要的任何部分。但是,doLayout不是你應該承擔的責任,這是佈局引擎的責任。

您可能還想查看this post,第一個反應有一個很好的解釋,並鏈接到一篇文章,更詳細。

就問題的第二部分而言,我不確定,但我們可能需要查看一些代碼才能得到一個想法。 「替換區域」實際上是否從視圖中刪除?

+1

我需要導入什麼來使用repaint()或doLayout()? – ironmantis7x

+0

你不會需要進口任何額外的費用,這些應該是你正在使用的Swing組件的方法 - 看文檔http://docs.oracle.com/javase/6/docs/api/java/awt/Component html的。 Component的任何子類都應該有這些方法可用。 – shortstuffsushi

+0

你避免直接調用的doLayout,如果你發現自己在一個位置,這是一個工作,然後你做一件事錯了嘛。 doLayout應該只會影響當前的容器。相反,使用invalidate而不是 – MadProgrammer

0

調用頂層組件上的revalidate()

+0

我是新來的Java,所以請耐心等待,我....究竟如何,我稱重新驗證()頂級組件?每次嘗試在repaint()後插入它時,都會發生編譯器錯誤。 – ironmantis7x

4

..在我的應用程序中,用戶選擇他們想要的頂級測試的設備平臺類型(該選擇是左邊一組兩個單選按鈕)。當用戶選擇Android或iOS時,複選框的中心分組會發生變化,以反映他們可以測試的一組Android設備或他們可以測試的一組iOS設備。

  1. 將一個面板放在'中心分組'中。
  2. 對面板使用CardLayout
  3. 將兩個iOS & Android控件添加到具有卡布局的面板。
  4. 根據需要在它們之間翻轉。