Java 中 paint() 方法和 repaint() 方法有什麼不同?


Paint() 和 Repaint()

  • paint():這種方法包含繪製此元件的指令。在 Java Swing 中,我們可以更改 paintComponent() 方法而不是 paint() 方法,因為 paint 呼叫了 paintBorder()paintComponent()paintChildren() 方法。我們無法直接呼叫此方法,而是可以呼叫 repaint()
  • repaint():此方法不可被重寫。它控制 update() -> paint() 週期。我們可以呼叫此方法使元件重新繪製自身。如果我們已經執行了更改元件外觀(但未更改大小)的操作,則我們可以呼叫此方法。

示例

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class PaintRepaintTest extends JPanel implements MouseListener {
   private Vector v;
   public PaintRepaintTest() {
      v = new Vector();
      setBackground(Color.white);
      addMouseListener(this);
   }
   public void paint(Graphics g) { // paint() method
      super.paint(g);
      g.setColor(Color.black);
      Enumeration enumeration = v.elements();
      while(enumeration.hasMoreElements()) {
         Point p = (Point)(enumeration.nextElement());
         g.drawRect(p.x-20, p.y-20, 40, 40);
      }
   }
  public void mousePressed(MouseEvent me) {
      v.add(me.getPoint());
      repaint(); // call repaint() method
   }
   public void mouseClicked(MouseEvent me) {}
   public void mouseEntered(MouseEvent me) {}
   public void mouseExited(MouseEvent me) {}
   public void mouseReleased(MouseEvent me) {}
   public static void main(String args[]) {
      JFrame frame = new JFrame();
      frame.getContentPane().add(new PaintRepaintTest());
      frame.setTitle("PaintRepaint Test");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setSize(375, 250);
      frame.setVisible(true);
   }
}

在上述程式中,如果我們單擊螢幕就能繪製正方形。在 mousePressed() 方法中,我們可以呼叫 repaint() 方法。

輸出

更新於:10-2-2020

6,000+ 次觀看

開啟你的 職業生涯

完成課程並獲得認證

開始學習
廣告