我需要添加dynamicaly組件到JPanel,但如果我只是添加(組件),那麼組件不會出現,如果我使然後JPanel.revalidate();那麼它就會出現,但JPanel閃爍,我可以使它更加美好,而不閃爍?Swing添加新組件
嗯,我已經找到解決方案,只是在添加(組件)後;我寫了component.repaint();它的工作原理,但現在有另一個窗口調整大小的問題,如果我調整窗口的大小,然後所有我添加的組件disableard !!!
我需要添加dynamicaly組件到JPanel,但如果我只是添加(組件),那麼組件不會出現,如果我使然後JPanel.revalidate();那麼它就會出現,但JPanel閃爍,我可以使它更加美好,而不閃爍?Swing添加新組件
嗯,我已經找到解決方案,只是在添加(組件)後;我寫了component.repaint();它的工作原理,但現在有另一個窗口調整大小的問題,如果我調整窗口的大小,然後所有我添加的組件disableard !!!
這是基本的,但你應該確保每個組件是
1)從美國東部時間增加(見SwingUtilities.invokeLater()
)
2)每個實例
在初始化時添加組件並隱藏它們,在需要時使它們可見,可能是一個更好的主意。使用方法Component.setVisible(boolean b)
這樣顯示和隱藏組件。
編輯:
我只是想在這裏我添加隨機分量的主JFrame的一個簡單的測試類,它工作得很好。
請嘗試撥打JFrame.pack()
以下JPanel.revalidate()
。
如果這沒有什麼區別,你可以發佈一些你的代碼添加動態組件嗎?
另一個編輯:
讓你的主要成分落實ComponentListener
接口和實現componentResized(ComponentEvent e)
方法調用JFrame.pack()。
不,因爲在初始化的那一刻,我不會現在將添加哪個組件:( – 2010-06-19 13:35:03
如果您添加新組件,則必須致電revalidate
。
例子:
panel.add(new JButton(...), ...);
panel.revalidate();
確保你從EDT內調用此。
如果還是閃爍看看panel.setDoubleBuffered
。
希望這會有所幫助,即使您身邊的示例代碼可以很好地看到您描述的效果。
你調整你的組件只加一次一個更小或更大的尺寸? – Gordon 2010-06-19 15:22:43
考慮發佈一個顯示問題的簡短示例:http://sscce.org/ – trashgod 2010-06-19 16:48:19
您使用的是什麼LayoutManager?一些LayoutManagers稍後不支持添加組件;其他人會進行大量的處理,這可能會解釋眨眼。 – jfpoilpret 2010-06-20 11:25:27