[英]Paint and PaintComponent Methods in JPanel
我無法理解 JPanel 類中定義的 paint 和 paintComponent 方法之間的區別。 為了讓您了解情況,我正在嘗試畫一張國際象棋桌; 以下是我一直在處理的代碼的一部分。
package main;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
public class Panell extends JPanel {
public Panell() {
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(100, 100, 400, 400);
}
@Override
public void paint(Graphics g){
boolean white=true;
for(int y=0;y<8;y++){
for(int x=0;x<8;x++){
if(white){
g.setColor(new Color(235, 235, 208));
}
else{
g.setColor(new Color(119, 148, 85));
}
g.fillRect(x*15, y*15, 15, 15);
white=!white;
}
white=!white;
}
}
}
我的第一個問題是它們是自動運行的嗎? 此外,由於他們顯然做同樣的事情,即“繪畫”,是否建議將這兩種方法合二為一? 這個方法的名稱是什么?
我是 Java 的新手,所以非常感謝任何幫助。 謝謝!
我一直在網上關注多個教程,但其中任何一個都提到了我的問題。 我想這可能是一個非常深入的話題,但我真的很想知道答案。 我已經嘗試了我在問題中所說的一切,但我總是最終把一件東西塗在另一件東西上,因此我問自己是否只有一種繪畫方法(通過合並它們)會更好,但是這樣做,另一個問題出現了,為什么他們會實現另一種方法來做與另一種方法完全相同的事情? .
它們是自動運行的嗎?
不。它們實際上是在組件需要重新繪制時由窗口系統調用的(即首次顯示、調整大小、用戶調用 repaint())
此外,由於他們顯然做同樣的事情,即“繪畫”,是否建議將這兩種方法合二為一?
paint 和 paintComponent 之間的區別在於,在 Swing 中,JComponent 實現 paint 以按正確的(預期的)順序調用 paintBorder、paintChildren 和 paintComponent。 所以通常情況下,如果您在 Swing 中子類化 J-whatever,最好覆蓋 paintComponent,而不是繪制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.