2013-04-29 49 views
1

因此,我爲一個班級編寫了一個小程序。我將它設計爲一​​個JApplet,而不是在瀏覽器中。除此之外,這是一個簡單的繪圖程序。您單擊兩個點來繪製選定的形狀,然後調用重繪。我遇到的問題是,當您將程序移至輔助監視器時繪製時,整個JApplet似乎消失,只顯示繪製的形狀。它只在第二點被選中後消失,所以我認爲它在repaint()上做了這個。我的JApplet在移動到輔助監視器時消失

我的輔助顯示器使用完全相同的品牌和分辨率,甚至是顏色配置文件。

任何其他技術細節,我正在使用Eclipse的運行按鈕進行測試,使用Java 1.7(無法回想起我頭頂的哪個更新),Windows 8 Enterprise 64x。

在此先感謝您的幫助!

+0

*「我將它設計成一個JApplet放入一個未裝飾的JFrame中」*這是您應該修復的第一件事。將它放在一個'JPanel'中,然後可以將它添加到未修飾的框架,窗口或其他任何需要的地方。這個問題聽起來像應用程序可疑。在組件上調用'getGraphics()'。如果這是正確的,當放置另一個應用程序時可以看到相同的效果。在applet前面,然後最小化應用程序。如果情況並非如此,請發佈[SSCCE](http://sscce.org/)以獲取更多提示。 – 2013-04-29 14:28:16

+0

謝謝,我會嘗試一下JPanel的想法,儘管在最小化窗口時我也遇到了問題。該窗口未修飾,因此我無法訪問最小化按鈕,因此我繪製了使用setState(JFrame.ICONIFIED)的最小化按鈕,並且運行良好,但無法正確恢復框架。只會顯示一個帶有標題和按鈕的小欄。也許JPanel也會解決這個問題。有可能。任何人都會嘗試結果。 – OffLuffy 2013-04-29 14:45:40

+0

我的意思是儘量減少應用程序。那就在你的applet之前! – 2013-04-29 14:51:04

回答

2

我的確在調用getGraphics();在JApplet的init()方法中。

這就是問題所在。 Graphics對象是一個暫時的東西,在下一次JVM認爲需要這樣做時將被重新繪製。這可能是由以下情況觸發的:

  • 更改窗口的大小或位置。
  • 用另一個程序覆蓋它,然後刪除覆蓋的應用程序。
  • 添加新組件或更改顯示的值。

請參閱Performing Custom Painting瞭解有關如何執行您正在嘗試實現的更多詳細信息。 OTOH Swing有JLabel,可以顯示BufferedImage。您可以以您想要的方式使用BufferedImage。更新時,請在標籤上撥打repaint()查看效果。

+0

感謝您的幫助。看起來我傾向於從頭開始重新設計程序以解決其中的一些問題。看起來會更容易。我已經非常濫用幾乎所有我已經加入的組件。驚訝它現在的狀態。 Java是一個非常神奇的惡意事物。 – OffLuffy 2013-04-29 16:02:34

+0

+1有趣;不同的監視器意味着主機對等組件的不同位。 – trashgod 2013-04-29 18:12:04

相關問題