Problemi nell'uso della grafica con i pannelli nella libreria Swing Java
-
07-07-2019 - |
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
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);
}
}