我在慢慢學習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