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() 方法。
輸出
廣告