Problème affichage panel [Résolu]

Signaler
Messages postés
9
Date d'inscription
lundi 29 janvier 2018
Statut
Membre
Dernière intervention
30 septembre 2018
-
Messages postés
9
Date d'inscription
lundi 29 janvier 2018
Statut
Membre
Dernière intervention
30 septembre 2018
-
Bonjour,je commence a programmer en java.
Je rencontre un problème d'affichage du panel.
Merci de m'aider =) ps = je suis débutant

voici Main->
import java.awt.Panel;

import javax.swing.JFrame;

public class Main {

 public static void main(String[] args) {
 
   JFrame frame = new JFrame();
   Panel panel = new Panel();
    frame.setVisible(true);
    frame.setSize(800, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setContentPane(panel);
    panel.setVisible(true);
 }

Voici la classe panel ->
import java.awt.Graphics;

import javax.swing.JPanel;

public class Panel extends JPanel {
 
 public  void paintcomponent(Graphics g) {
  
  g.fillRect(1, 1, 111, 111);
  
 }

}

1 réponse

Messages postés
16336
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 mai 2021
118
Bonjour,

1) Dans main tu as importé java.awt.Panel donc c'est cette classe Panel (qui n'affiches rien) que tu utilises, pas celle que tu as écrites. Donc il faudrait supprimer l'import et idéalement éviter d'appeler ta classe personnelle de la même manière qu'une classe Java existante (et aussi utilisée que Panel...)

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        MyPanel panel = new MyPanel();
        frame.setVisible(true);
        frame.setSize(800, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setContentPane(panel);
        panel.setVisible(true);
    }
}


2) Dans Panel ta méthode s'appelle paintcomponent (avec un C minuscule), mais pour qu'elle puisse être affichée, elle doit surcharger la méthode de JPanel avec exactement le même nom, c'est à dire paintComponent (avec un C majuscule). Astuce : quand tu veux faire une surcharge ajoutes l'annotation @Override, ça vérifiera que la méthode est bien celle que tu pensais surcharger.

import java.awt.Graphics;
import javax.swing.JPanel;

public class MyPanel extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        g.fillRect(1, 1, 111, 111);
    }
}
Messages postés
9
Date d'inscription
lundi 29 janvier 2018
Statut
Membre
Dernière intervention
30 septembre 2018

merci beaucoup =))