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);
}
}
31 janv. 2018 à 16:27