我正在慢慢学习Java,因此我决定尝试构建tic TAC Toe游戏。我开始尝试画图,并且找到了一种简单的方法来画线,每个人都说可以。到目前为止,我有:
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类中有一个构造板方法,其中有一个带有super()的构造函数Board()。
public Board(){
super();
}
然后,我有一个主类,该主类仅使Board类型的对象成为对象并调用我的方法。我搜寻了我知道要看的所有地方,并且到处都说我所拥有的是画线的方法。然后其他我发现的带有空指针异常的人要么没有找到解决方案,要么没有找到适合我的解决方案。我尝试了DebugGraphics,将其全部放入主类,并且line = 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
的JPanel
方法,以便能够在其中显示自定义绘制的图形内容。那是您必须画板的地方。
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);
}
}