當在任何JComponent中覆寫public void paintComponent(Graphics g)以對該JComponent進行自定義繪畫時,Graphic物件g應在繪畫結束時被處理掉(以及為什么)?
public void paintComponent(Graphics g) {
super.paintComponent(g)。
g.drawString("To dispose or not to dispose ? ",10,20)。)
//dispose or avoid ?.
g.dispose()。
uj5u.com熱心網友回復:
你不應該處置Graphics物件,除非你的代碼創建了Graphics物件。
JComponent的paint()方法將創建一個Graphics物件并將其傳遞給每個組件的三個繪畫方法。
請看。近距離觀察繪畫機制。
當組件的繪制完成后,paint()方法將dispose()這個臨時Graphics物件。請看以下代碼。https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/JComponent.java
如果你手動創建了一個圖形物件,那么你應該處置它:
Graphics2D g2d =(Graphics2D)g.create()。
//do custom painting
g2d.dispose()。
通常情況下,如果你打算通過添加AffineTransform(例如)到Graphics來改變繪畫,那么創建一個傳遞的Graphics物件的副本是個好主意。
uj5u.com熱心網友回復:
一般來說,如果你沒有創建資源,那么處置它就不是你的作業。由于該圖形被傳遞給你,我不會擔心處置它的問題。
uj5u.com熱心網友回復:
不,不要在paintComponent中處置Graphics物件。這將阻止其他組件的繪制。
使用Graphics.dispose的正確方法是當你向一個影像緩沖區繪圖時,比如
BufferedImage im = new BufferedImage(. ..,...);
Graphics g = im.getGraphics()。
JPanel.paint(g); // 例如
g.drawLine(...); //另一個例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310292.html
標籤:
