在JFrame(Swing)中使用Graphics时出现空指针异常



我正在慢慢学习java,我决定尝试构建一个井字游戏。我开始尝试画木板,我找到了一个简单的方法来画线,每个人都说这会奏效。到目前为止,我有这个:

    public void constructBoard() {
    JFrame frame = new JFrame("Tic Tac Toe");
    frame.setSize(600,600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.toFront();
    Graphics lines = new Graphics();
    lines = getGraphics();
    lines.drawLine(100,100,300,500);
    lines.setColor(Color.black);
  //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
  //  frame.add(label, BorderLayout.CENTER);
}

我的JFrame出现了,我的标题在那里,但没有行。我已经尝试了多种方法,其中有一种单独的方法用于该行,例如:

public void drawBoard(Graphics lines){
     lines = getGraphics();
     lines.drawLine(100,100,300,500);
     lines.setColor(Color.black);
}

但当我在主类中调用它时,它告诉我需要括号之间的某些内容来匹配类型Graphics。我的编译器(Eclipse)建议使用null,但对我来说,这可能会导致null指针异常。

我在board类中有一个construct-board方法,其中有一个构造函数board()和super()

    public Board(){
        super();
    }

然后我有一个主类,它只生成一个Board类型的对象并调用我的方法。我到处找我知道该找的地方,到处都说我所拥有的是划清界限的方法。然后,我发现其他有空指针异常的人要么没有得到解决方案,要么没有得到适合我的解决方案。我尝试了DebugGraphics,将其全部放在main类中,并且lines=new Graphics();但这给了我一个错误。谢谢你的帮助。

全板类:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Board extends JPanel {
        public Board(){
            super();
        }
        public void constructBoard() {
            JFrame frame = new JFrame("Tic Tac Toe");
            frame.setSize(600,600);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.toFront();
                Graphics lines = new Graphics();
                lines = getGraphics();
                lines.drawLine(100,100,300,500);
            lines.setColor(Color.black);
            //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
            //  frame.add(label, BorderLayout.CENTER);
        }
}

全主类:

import java.awt.Color;
import java.awt.Graphics;

public class Main {
    /**
     * @param args
     */
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                    Board board = new Board();
                    board.constructBoard();
            }
}

我认为你开始的方式不对。请参阅下面的概念验证,向您展示如何实际覆盖JPanelpaintComponent方法,以便能够在其中显示自定义绘制的图形内容。这是您必须绘制板的地方。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class App {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.getContentPane().add(new MainPanel());
        frame.setBounds(100, 100, 600, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
class MainPanel extends JPanel {
    MainPanel() {
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        int width = getWidth();
        int height = getHeight();
        drawBoard((Graphics2D) g, width, height);
    }
    private void drawBoard(Graphics2D g2, int width, int height) {
        // TODO: this is the place where you actually want to draw your board
        g2.drawRect(10, 10, width - 20, height - 20);
    }
}

相关内容

  • 没有找到相关文章

最新更新