Проблемы с использованием графики с панелями в библиотеке Java Swing

StackOverflow https://stackoverflow.com/questions/279781

Вопрос

Привет всем, я пытаюсь запустить следующую программу, но получаю исключение NullPointerException.Я новичок в библиотеке Java swing, так что я мог бы делать что-то очень глупое.В любом случае, вот мои два урока, на которых я просто играю, и все, что я хочу сделать, это нарисовать чертов круг (я хочу нарисовать виселицу с палачом на ней в конце).

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 появляется в строке g.fillOval.

Заранее спасибо,

Томек

Это было полезно?

Решение

Ты получаешь NPE, потому что g не задан, следовательно, это null.Кроме того, вы не должны выполнять рисование в конструкторе.Перегрузка paintComponent(Graphics g) вместо этого.

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

Я бы также изучил Буферизованное изображение.

Другие советы

Пара вещей:Не забудьте добавить панель в JFrame.И переопределить paint() способ JPanel для вашей индивидуальной росписи.Вам не нужно объявлять графический объект, поскольку JPanelметод paint в любом случае будет иметь ссылку на один из них.

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);       
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top