2010-06-19 104 views
1

我需要添加dynamicaly組件到JPanel,但如果我只是添加(組件),那麼組件不會出現,如果我使然後JPanel.revalidate();那麼它就會出現,但JPanel閃爍,我可以使它更加美好,而不閃爍?Swing添加新組件

嗯,我已經找到解決方案,只是在添加(組件)後;我寫了component.repaint();它的工作原理,但現在有另一個窗口調整大小的問題,如果我調整窗口的大小,然後所有我添加的組件disableard !!!

+0

你調整你的組件只加一次一個更小或更大的尺寸? – Gordon 2010-06-19 15:22:43

+1

考慮發佈一個顯示問題的簡短示例:http://sscce.org/ – trashgod 2010-06-19 16:48:19

+0

您使用的是什麼LayoutManager?一些LayoutManagers稍後不支持添加組件;其他人會進行大量的處理,這可能會解釋眨眼。 – jfpoilpret 2010-06-20 11:25:27

回答

3

這是基本的,但你應該確保每個組件是

1)從美國東部時間增加(見SwingUtilities.invokeLater()

2)每個實例

0

在初始化時添加組件並隱藏它們,在需要時使它們可見,可能是一個更好的主意。使用方法Component.setVisible(boolean b)這樣顯示和隱藏組件。

編輯:

我只是想在這裏我添加隨機分量的主JFrame的一個簡單的測試類,它工作得很好。

請嘗試撥打JFrame.pack()以下JPanel.revalidate()

如果這沒有什麼區別,你可以發佈一些你的代碼添加動態組件嗎?

另一個編輯:

讓你的主要成分落實ComponentListener接口和實現componentResized(ComponentEvent e)方法調用JFrame.pack()。

+1

不,因爲在初始化的那一刻,我不會現在將添加哪個組件:( – 2010-06-19 13:35:03

0

如果您添加新組件,則必須致電revalidate

例子:

panel.add(new JButton(...), ...); 
panel.revalidate(); 

確保你從EDT內調用此。

如果還是閃爍看看panel.setDoubleBuffered

希望這會有所幫助,即使您身邊的示例代碼可以很好地看到您描述的效果。

相關問題