PaintComponent, кажется, не получает звонок или показать - PullRequest
0 голосов
/ 29 февраля 2020

Моя проблема действительно проста: у меня есть эта маленькая программа, и она просто не отображает красное поле, которое я пытаюсь сделать:

Main

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

Affichage:

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: да, тест тоже не распечатывается

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

На самом деле, не расширяйте 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.
   }
}

И помните, что не следует смешивать Swing и AWT компонентов.

0 голосов
/ 29 февраля 2020

Вы добавляете компонент Swing (javax.swing.JComponent) в кадр AWT (java.awt.Frame). Никто не вызовет метод paintComponents(), поэтому вы не получите никакого вывода или результата. Вместо этого добавьте javax.swing.JFrame, чтобы у вас была рамка Swing с компонентом Swing.

...