我在慢慢学习java,并决定尝试构建一个tic tac toe游戏。我试图画出画板,我发现了一种简单的方法来绘制每个人都会说的线条。我到目前为止:在JFrame中使用图形时出现空指针异常(Swing)
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出现了,我的标题在那里,但没有线。我已经试过许多东西,其中WAW一个单独的方法为线,如:
public void drawBoard(Graphics lines){
lines = getGraphics();
lines.drawLine(100,100,300,500);
lines.setColor(Color.black);
}
但是,当我把这个在我的主类,它告诉我,我需要括号之间的事情,以匹配型显卡。我的编译器(Eclipse)推荐使用null,但对我来说,这可能会导致空指针异常。
我在Board类中使用构造板方法,并在其中使用带有super()的构造函数Board()。
public Board(){
super();
}
然后,我有一个主类,只是使板类型的对象,并调用我的方法。我已经搜索到了我所知道的任何地方,并且到处都有说我拥有的是绘制线条的方式。然后,我发现有空指针异常的其他人还没有得到解决方案,或没有得到一个适合我的解决方案。我试过DebugGraphics,把它全部放在主类中,而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();
}
}
嗨 - 尝试使用 “的paintComponent()”:Java2D的:介绍和教程(http://www.apl.jhu.edu/~hall/java/Java2D-Tutorial.html),或[Java图形 - 绘画和重绘](http://www.tech-recipes.com/rx/1177/java-graphics-paint-and-repaint/)。 – paulsm4
如果我知道如何解决问题,看起来会有用。我只是不明白为什么我这样做不会奏效。这是我能找到的最常用的方式,但在任何地方,我都发现人们希望提问者使用新的更复杂的东西来解决这个问题。这背后有一些推理吗? –
诀窍是不只是“绘制某些东西”,而是要绘制*响应*到一个*(重复)绘制事件*。我原本打算建议一个onPaint()处理程序,但是我发现的两个第一个教程都使用了“paintComponent()”。 '希望能帮助.. PSM – paulsm4