Problemas al usar gráficos con paneles en la biblioteca Java Swing
-
07-07-2019 - |
Pregunta
Hola a todos, estoy tratando de ejecutar el siguiente programa, pero obtengo una NullPointerException. Soy nuevo en la biblioteca Java Swing, así que podría estar haciendo algo muy tonto. De cualquier manera, aquí están mis dos clases con las que estoy jugando por ahora y todo lo que quiero hacer es dibujar un maldito círculo (no quiero dibujar una horca, con un ahorcado al final).
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);
}
}
La NullPointerException viene en la línea g.fillOval.
Gracias de antemano,
Tomek
Solución
Obtiene NPE porque g
no está configurado, por lo tanto, es nulo
. Además, no deberías hacer el dibujo en el constructor. Sobrecarga paintComponent (Gráficos g)
en su lugar.
public class Gallow extends JPanel {
public paintComponent(Graphics g){
g.fillOval(10, 20, 40, 25);
}
}
También buscaría en BufferedImage .
Otros consejos
Un par de cosas: no olvide agregar el panel al JFrame
. Y anule el método paint ()
de JPanel
para su pintura personalizada. No necesita declarar un objeto Graphics ya que el método de pintura de JPanel
tendrá una referencia a uno en cualquier caso.
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);
}
}