Problemas usando gráficos com painéis no java swing biblioteca
-
07-07-2019 - |
Pergunta
Olá a todos, eu estou tentando executar o programa a seguir, mas estou recebendo um NullPointerException. Eu sou novo para a biblioteca Java Swing para que eu pudesse estar fazendo algo muito estúpido. De qualquer maneira, aqui estão minhas duas classes estou apenas brincando ao redor para agora e tudo que eu quero fazer é desenhar um círculo maldito (doente quer desenhar uma gallow, com uma forca sobre ele no 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);
}
}
A NullPointerException vem na linha g.fillOval.
Agradecemos antecipadamente,
Tomek
Solução
Você está recebendo NPE porque g
não está definido, portanto, é null
. Além disso, você não deveria estar fazendo o desenho no construtor. Sobrecarga paintComponent(Graphics g)
.
public class Gallow extends JPanel {
public paintComponent(Graphics g){
g.fillOval(10, 20, 40, 25);
}
}
Eu também olhar em BufferedImage .
Outras dicas
Um par de coisas: não se esqueça de fazer o painel à JFrame
. E substituir o método paint()
de JPanel
para sua pintura personalizada. Você não precisa declarar um objeto Graphics desde método paint do JPanel
terá uma referência a um, em qualquer 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);
}
}