Domanda

Ciao a tutti, sto cercando di eseguire il seguente programma, ma sto ottenendo una NullPointerException. Sono nuovo nella libreria swing Java, quindi potrei fare qualcosa di molto stupido. In entrambi i casi qui sono le mie due lezioni che sto giocando per ora e tutto quello che voglio fare è disegnare un dannato cerchio (non voglio disegnare una forca, con un boia alla fine).

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);

        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
     Hangman2 application = new Hangman2();
     application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {
    private Graphics g;

    public Gallow(){
        g.fillOval(10, 20, 40, 25);       
    }
}

NullPointerException arriva alla riga g.fillOval.

Grazie in anticipo,

Tomek

È stato utile?

Soluzione

Stai ricevendo NPE perché g non è impostato, quindi è null . Inoltre, non dovresti fare il disegno nel costruttore. Sovraccarico paintComponent (Graphics g) invece.

public class Gallow extends JPanel {
    public paintComponent(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}

Esaminerei anche BufferedImage .

Altri suggerimenti

Un paio di cose: non dimenticare di aggiungere il pannello al JFrame . E sovrascrivi il metodo paint () di JPanel per il tuo dipinto personalizzato. Non è necessario dichiarare un oggetto Graphics poiché il metodo di disegno del JPanel avrà comunque un riferimento a uno.

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);
        add(gallow, BorderLayout.CENTER);//here
        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
        Hangman2 application = new Hangman2();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {

    public Gallow(){
        super();
    }

    public void paint(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top