2012-03-04 81 views
0

JComponent的子類中,我優先於paintComponent繪製方法。重寫的方法首先要調用super.paintComponent,因爲大多數文本告訴我這樣做。有人說這是必要的,以便其他JComponents可以自己畫。但是,調用super方法會清除圖像,並使用背景色填充圖像。我不希望發生這種情況。如果我跳過呼叫超級方法,我可以自由選擇是否要撥打防止super.paintComponent調用clearRect

g.setColor(getBackground()); 
g.fillRect(0, 0, getWidth() - 1, getHeight() - 1); 

爲了在重畫之前清除圖像。

但是,我擔心通過跳過超級方法,我會跳過超級方法所做的其他重要操作。我如何確保執行其他重要操作時允許自己選擇是否要清除圖像?

編輯:

這裏是我的paintComponent:

public void paintComponent(Graphics g) { 
    super.paintComponent(g); // necessary so other panels can paint themselves.  
    //   g.setColor(getBackground()); 
    //   g.fillRect(0, 0, getWidth(), getHeight()); 
    //   g.setColor(Color.black); 
    if (down) { 
     g.drawLine(downX, downY, currentX, currentY); 
    }   
} 

它只是吸引了來自當用戶按下鼠標按鈕,在鼠標被拖到線。如果鼠標拖曳,則線條移動。如果鼠標被釋放,它不會畫任何東西。

事實上,如果鼠標被釋放,程序將擦除用戶正在繪製的線條。我不希望這個計劃能夠這樣做,這樣會有一些線條。

+0

請告訴我們更多關於你目前的問題。我仍然不確定你的程序爲什麼會這樣。你可以顯示你的整個'paintComponent'方法嗎? – 2012-03-04 00:23:38

回答

-1

您可以跳過超()調用或設置不透明的虛假與JComponent's setOpague()

祝你好運!

+0

setOpaque(false)不起作用。我將它添加到這個組件的構造函數中。現在程序仍然擦除已經繪製的內容,但沒有背景顏色。就好像它將屏幕清除爲透明顏色。 – Croolsby 2012-03-04 02:07:06

+0

如果您嘗試重寫* paint(Graphics)*而不是* paintComponent(Grahpics)*?這可能取決於你試圖達到的目標。 – Wesley 2012-03-04 02:10:38

+0

沒有,沒有工作。我認爲這是因爲如果我不重寫'paintComponent',組件會自動調用超級方法,這似乎會擦除繪製的所有東西。 – Croolsby 2012-03-04 02:25:37