我有以下代碼:爲什麼setBackground會覆蓋其他繪圖?
private void ConvertButtonActionPerformed(java.awt.event.ActionEvent evt) {
getContentPane().setBackground(new Color(50, 100, 200));
Graphics g = getGraphics();
g.drawString("tekst", 120, 120);
g.drawLine(175, 175, 140, 140);
g.setColor(Color.yellow);
g.fillOval(190, 120, 160, 160);
g.setColor(Color.red);
g.drawRoundRect(190, 110, 150, 120, 115, 115);
}
我想它畫的形式,在適當的方式(按下按鈕後),但會發生什麼,而不是被它描繪只有第一次點擊後和後背景第二次點擊它繪製其餘的對象。 當我嘗試這一方法代替,具有壓倒一切的塗料方法:
public void paint(Graphics g){
setBackground(new Color(50, 100, 200));
g.drawString("tekst", 120, 120);
g.drawLine(175, 175, 140, 140);
g.setColor(Color.yellow);
g.fillOval(190, 120, 160, 160);
g.setColor(Color.red);
g.drawRoundRect(190, 110, 150, 120, 115, 115);
}
和具有
private void ConvertButtonActionPerformed(java.awt.event.ActionEvent evt) {
repaint();
}
則背景爲灰色的顏色,而不是藍色和按鈕消失(的僅出現後我有鼠標右鍵)。
所以,最後我的問題是:這兩個例子究竟有什麼問題(我想同時理解,因爲這只是一個學習練習,我想知道發生了什麼,而不是簡單地找到解決方案) ,哪種方法更好?在此先感謝,我希望我不會錯過本網站上的類似問題,如果我確實對不起!
其實,你永遠不應該調用'setBackground ()'或在'paint()'或'paintComponent()'中設置其他屬性,因爲這將觸發一個'PropertyChange'事件,這將導致組件的repaint()。 – haraldK