簡體   English   中英

JPanel 中的 Paint 和 PaintComponent 方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM