2015-05-09 33 views
-1

我想在Java中使用awt來製作井字遊戲,但我遇到了一些問題。實際上,這是一項正在進行的工作,其中一些部分尚未完成。在Java中的井字遊戲中使用畫布

下面的代碼:

import java.awt.*; 
import java.awt.event.*; 
class tictactoe extends Frame implements ActionListener 
{ 
    public Canvas c1,c2,c3,c4,c5,c6,c7,c8,c9; 
    Panel p; 
    Button b; 
    tictactoe() 
    { 
     setLayout(new BorderLayout()); 
     b=new Button("New Game"); 
     add(b,BorderLayout.SOUTH); // Button to reset the game 
     p=new Panel(new GridLayout(3,3,5,5)); // Canvas objects in GridLayout 
     c1=new MyCanvas(); 
     c2=new MyCanvas(); 
     c3=new MyCanvas(); 
     c4=new MyCanvas(); 
     c5=new MyCanvas(); 
     c6=new MyCanvas(); 
     c7=new MyCanvas(); 
     c8=new MyCanvas(); 
     c9=new MyCanvas(); 
     p.add(c1);p.add(c2);p.add(c3); 
     p.add(c4);p.add(c5);p.add(c6); 
     p.add(c7);p.add(c8);p.add(c9); 
     add(p); 
     setBounds(400,100,310,310); 
     setResizable(false); 
     setVisible(true); 
    } 
    public static void main(String [] args) 
    { 
     new tictactoe(); 
    } 
    public void actionPerformed(ActionEvent ae) 
    { 
      // Work in progress 
    } 
} 
class MyCanvas extends Canvas 
{ 
    public void paint(Graphics g) 
    { 
     setBackground(Color.GREEN); 
     g.drawLine(0,0,120,100); // This is the part where I am facing the problem 
    } 
} 

的問題是,我想打電話給drawline()單一Canvas元素,但drawLine()方法繪製在所有九個畫布元素線。

+1

每個畫布實例都是'MyCanvas'類型,它的繪製方法將繪製您描述的線條。 – Marv

回答

0

假設一切工作正常(即使每個平方創建一個單獨的畫布是不是我會怎麼處理這個),你應該能夠做到這一點:

Graphics g = c1.getGraphics(); 
g.drawLine(20, 100, 120, 100); 

你在哪裏得到的畫布的圖形對象,然後draw()。上面的代碼在你的主類中。

繪製所有畫布的線條的原因是,此方法在MyCanvas()的默認繪製方法中,因此在創建每個Canvas對象時執行。

+0

嗨感謝您的回覆,但我沒有得到你說的...我的意思是我使用drawLine()方法,但它在paint()方法中,而不是在MyCanvas類的構造函數中,所以它如何影響所有這些? –

+0

對不起,我誤解了代碼。你基本上覆蓋了默認的'paint()'方法,所以當畫布自己繪製時,它總是繪製線條。我建議的方法是通過在課堂之外移動平局調用來緩解這種情況。 –

+0

你的意思是說我應該在main方法中調用drawLine()方法,並且重寫的paint()方法不會有任何代碼? –