Java: Comment dessiner dans une toile?


Je suis nouveau sur Java et je veux faire un jeu simple où il y a des carrés dans une grille simple (quelque chose entre un serpent et un labyrinthe). Le nombre de carrés ne change pas, seule leur couleur le fait.

J'ai déjà programmé les objets dont j'ai besoin pour le jeu. Maintenant, je veux afficher le jeu.

Je sais comment créer un JFrame, un JPanel et un JButton, dont j'aurai besoin, mais je ne comprends pas comment dessiner dans un canevas.

J'ai fait une classe de test:

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

public class Test extends Canvas {
    public static void main (String[] arg) {
        JFrame f=new JFrame();
        f.setTitle("Title");
        f.setSize(400,500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        JPanel pan=new JPanel(new FlowLayout());
        pan.add(new JButton("hey"));
        Test canvas=new Test();
        Graphics g=canvas.getGraphics();
        canvas.paint(g);
        pan.add(canvas);
        f.setContentPane(pan);
    }

    public Test() {
        setBackground (Color.green);
        setSize(300,300);
        setVisible(true);
    }

    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillRect(10,10,80,80);
        g.setColor(Color.BLUE);
        g.fillRect(150,50,80,80);
        g.setColor(c);
    }
}

Quand je cours ceci, une fenêtre est créée, avec le titre , la taille et le bouton corrects, mais il n'y a rien d'autre (pas de fond vert, pas de rectangle rouge ou bleu), et une erreur est détectée:

Exception in thread "main" java.lang.NullPointerException
    at Test.paint(Test.java:25)
    at Test.main(Test.java:15)

Qu'est-ce que je fais de mal ? Existe-t-il une meilleure façon de dessiner ces carrés ?

Merci !

Author: Roni Kaufman, 2016-06-10

1 answers

Commentez ces deux lignes

 //Graphics g=canvas.getGraphics();
 //canvas.paint(g);

Et changer la méthode de peinture comme suit.

 @Override
 public void paint(Graphics g) {
     super.paint(g);

Tout va bien. Espérons qu'il vous aide à faire des progrès.

 4
Author: Beniton, 2016-06-10 18:05:00