Java: Come disegnare in una tela?


Sono nuovo di Java e voglio fare un gioco semplice in cui ci sono quadrati in una semplice griglia (qualcosa tra un serpente e un labirinto). Il numero di quadrati non cambia, solo il loro colore lo fa.

Ho già programmato gli oggetti di cui ho bisogno per il gioco. Ora voglio visualizzare il gioco.

So come creare un JFrame, un JPanel e un JButton, di cui avrò bisogno, ma non capisco come disegnare in una tela.

Ho fatto una classe di 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);
    }
}

Quando corro questo, viene creata una finestra , con il titolo, la dimensione e il pulsante corretti, ma non c'è nient'altro (nessun sfondo verde, nessun rettangolo rosso o blu) e viene rilevato un errore:

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

Cosa sto facendo di sbagliato ? C'è un modo migliore per disegnare questi quadrati ?

Grazie !

Author: Roni Kaufman, 2016-06-10

1 answers

Commenta queste due righe

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

E modificare il metodo di vernice come segue.

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

Il riposo va bene. Spero che ti aiuti a progredire.

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