2016-11-10 53 views
-2

我有一個帶有2個JFrames的Java項目。在一個框架上是使用AWT圖形庫繪製的一堆東西。另一個框架是使用javax.swing.JPanel的設置面板。這些設置正確地修改了第一個JFrame上的內容,但是當設置面板上的修改對象在主JFrame上繪製自己時(例如,如果選中設置中的複選框,則複選框顯示在左上角另一個JFrame)。在我的代碼中,無處添加設置面板的內容到第一個JFrame。爲什麼會發生這種情況?JPanel使用2個不同的JFrames

該代碼有點長,存儲到3個不同的文件,所以我上傳到GitHub。您可以查看完整項目(對於Eclipse)here,或直接查看源文件here.第一個JFrame位於main.java中,設置JFrame位於menuObj.java中。

+1

1)爲更好地提供幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/q/9554636/418556) –

回答

0

非常有趣的項目。發現它是repaint();是什麼導致你的問題。一個奇怪的問題,從來沒有遇到過。雖然我個人不喜歡使用重繪,但我實現了一個遊戲循環。

在eclipse中檢查你的代碼雖然有很多關於靜態訪問的警告,甚至有一個未使用的變量。你的menuObj類擴展了JPanel,但也有一個JPanel引用變量,當沒有做任何事情時,有兩個JPanel是浪費資源,但它不能解決你的問題。我建議你重命名你的主類,因爲它共享主要的方法名稱,但它可以工作,但可能會在未來出現問題。命名主要類「main」或「Main」是誘人的,但應該避免。

我希望它能解決您的問題。

+0

我怎樣纔不使用'repaint()'?我嘗試插入一個while循環,但沒有畫。另外,我真的不想進入Java的多線程,但我可以做到這一點,如果我必須 –

+0

使用[double buffering](http://stackoverflow.com/questions/2063607/java-panel-double-buffering )。您基本上將所有內容都繪製成圖像,然後將該圖像繪製到JPanel中。不需要多線程。 – Squiddie