2015-12-18 89 views
-2

我們假設我有一個擴展JPanel的對象mainPanel,並在其內部擴展了Jpanel的另一個對象internaPanel。有沒有辦法找出Graphics是否被翻譯?

mainPanel的paintComponent()方法我在我的Graphics對象上使用translate()方法,它也應該改變我的internaPanel圖形上下文的原點。而且,只要我需要時在mainPanel上調用repaint()方法。但問題是,有時我的internaPanel被迫自己重新繪製 - 例如當我改變其不透明參數時。當發生這種情況時,internaPanel顯然出現在JFrame的錯誤部分。

我該如何防止這種情況發生?有沒有辦法來檢查internaPanel paintComponent()方法的Graphics參數是否來自mainPanel(以及它是否被翻譯過)?

謝謝!

+1

請顯示一些代碼! – hzpz

+0

................代碼?? –

回答

1

你的問題是你的代碼改變了你的GUI對象在paintComponent方法中的狀態,而你永遠不應該這樣做,因爲你發現了這個原因:你沒有完全控制何時甚至是否繪畫將會發生。

解決的辦法是改變paintComponent外部的對象狀態,然後在paintComponent中使用該狀態(字段)。

有關更多詳情,請顯示更多(某些!)代碼。

2

不確定在兩個組件之間有父/子關係時爲什麼要使用Graphics translate(...)方法。在進行自定義繪畫時使用圖形翻譯。

當您處理Swing組件時,您應該使用佈局管理器並讓佈局管理器在每個組件上調用setLocation(...)方法,以便相對於父組件繪製子組件。

您不應該嘗試自己管理位置。有關更多信息,請參閱Layout Managers上的Swing教程部分。

相關問題