2013-03-14 50 views
1

我必須強制我的程序驗證並重新繪製我的GUI(或其中的一部分),只要它向它添加新組件。在組件被繪製在屏幕上之前必須有絕對沒有做的事,然後代碼可以繼續。即時重繪並驗證

我正在創建一個分層的JPanel結構。一系列JPanel,每個JPanel連續一系列JPanel,每個JPanel包含一系列JPanel。

當我創建第三級JPanel時,我需要從尚未繪製的第一級JPanel中獲取數據。這會導致他們返回錯誤的數據並搞亂整個設置。

第一級JPanels只在master for循環(通過第一級JPanels的一個)完成後才被繪製。

如何強制我的程序在創建並添加到其父項後立即繪製它? 這裏的一切都是在EDT內完成的,我查了一下。重繪和驗證根本不起作用。編輯: 好吧,我用羅賓斯解決方案。

但是,是否有辦法強制即時GUI更新,只要代碼中的行被執行(選擇循環finins和類似的東西)。如果可能的話,調試一些東西會容易得多。即使更新意味着暫停所有其他線程。

回答

3

當我創建第三級JPanel時,我需要從第一級獲取 尚未繪製的JPanel。這導致他們返回錯誤的數據 並搞砸了整個設置。

我會先建議將此設置更改爲更安全的設置。不得不依賴UI元素的繪畫順序聽起來像是一個討厭問題的好來源。

第一級JPanels只在主循環(一個 ,它進入低谷一級JPanels)後完成繪製。

我該如何強制我的程序在創建它時立即繪製它,並將其 添加到其父項?這裏的一切都在EDT內完成,我檢查了一下。 重繪和驗證根本不起作用。

它不起作用,因爲你阻止了EDT。調用repaint和/或validate實際上不會觸發重繪。相反,它安排一個。您可以嘗試在您分別在美國東部時間表上安排的幾個單獨的Runnable中拆分主循環。這可能會允許通過repaint呼叫計劃的Runnable之間滑動。但是,這不能保證。

1

您應該有一個GUI數據模型,其中包含要放在面板上的信息。

您將生成信息,然後創建您的GUI組件。