PaintComponent 似乎没有接到电话或显示

PaintComponent don't seem to get call or to show

我的问题很简单:我有这个小程序,但它没有显示我正在尝试制作的红框:

主要

public class Main {
    public static void main(String[] args) {
        Affichage a = new Affichage();
        a.setVisible(true);
    }
}

附件:

import java.awt.*;
import javax.swing.*;

public class Affichage extends Frame{
    public Affichage(){
        setTitle("Exo 1 : Galerie");
        setSize(1120,560);
        Graphique graph = new Graphique();
        this.add(graph);
    }
}

图形:

import javax.swing.*;
import java.awt.*;

public class Graphique extends JComponent {
    @Override
    public void paintComponents(Graphics g) {
        super.paintComponents(g);
        Graphics pinceau = g.create();

        pinceau.setColor(Color.RED);
        pinceau.fillRect(100, 100, 200, 200);

        System.out.println("test");
    }
}

我敢打赌这是嘲笑,但我找不到它是什么,帮帮我。 PS : 是的,测试也没有打印出来

您正在将 Swing 组件 (javax.swing.JComponent) 添加到 AWT 框架 (java.awt.Frame)。没有人会调用 paintComponents() 方法,这就是您得不到任何输出或结果的原因。相反,从 javax.swing.JFrame 扩展,因此您有一个带有 Swing 组件的 Swing 框架。

实际上,不要扩展 JFrame,因为这是不好的做法。只是举个例子。要绘制,请扩展 JPanel 并覆盖 paintComponent.

JFrame f = new JFrame();
f.add(new MyPanel());

class MyPanel extends JPanel {
   // other stuff
   public void paintComponent(Graphics g) {
       super.paintComponent(g);  
       // painting stuff.
   }
}

切记不要混用 SwingAWT 成分。