2012-07-25 93 views
0

我想用java swing製作一個Tic Tac Toe程序,並且我製作了框架。我怎麼能讓JButton數組中的按鈕激活int數組?我想要int數組來保存井字格網格中的點的值,所以當按下按鈕時,int數組中相應的點將是0或1,並且按鈕的文本將變爲一個X或O.JButton數組到int數組

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class TicTacToeGui extends javax.swing.JFrame implements ActionListener 
{ 

    int[][] grid = new int[3][3]; 
    public final static int r = 3; 
    public final static int c = 3; 
    public final static int X = 0; 
    public final static int O = 1; 

    TicTacToeGui() 
    { 
     this.setTitle("Tic Tac Toe"); 
     JButton[][] button = new JButton[3][3]; 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(r, c)); 
     for(int i = 0; i < r; i++) 
     { 
      for(int j = 0; j < c; j++) 
      { 
       button[i][j] = new JButton(""); 
       button[i][j].addActionListener(this); 
       panel.add(button[i][j]); 
      } 

     } 
     this.add(panel); 
     this.setSize(400, 400); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void actionPerformed(ActionEvent e){ 
     if(e.getSource() instanceof JButton){ 

     } 
    } 
    public static void main(String [] args) 
    { 
     new TicTacToeGui().setVisible(true); 
    } 

} 

回答

2

您可以創建自己的JButton實現併爲其提供索引值。我們,你可以從ActionListener

public void actionPerformed(ActionEvent e){ 
    if(e.getSource() instanceof MySuperButton){ 

     MySuperButton btn = (MySuperButton)e.getSource(); 
     int[] index = btn.getIndex(); 
     // or 
     int row = btn.getRow(); 
     int col = btn.getColumn(); 

    } 
} 

提取它然後,當你設置它,你可以:

for(int i = 0; i < r; i++) 
{ 
    for(int j = 0; j < c; j++) 
    { 
     button[i][j] = new MySuperButton(i, j); // Store the row/column 
     button[i][j].addActionListener(this); 
     panel.add(button[i][j]); 
    } 

} 

這也將允許你存儲按鈕的狀態,內部...

您可能還喜歡看JToggleButton

0

假設將JButton索引鏡像int數組,可以搜索對JButton被按壓(在actionPerformede.getSource())按鈕陣列中,但你必須把按鈕數組作爲實例變量的類,所以你可以從其他方法使用它,尤其是。 actionPerformed()。一旦找到索引,只需在int數組中更新它的對應值即可。

0

使用JButton的setActionCommand方法設置按鈕的動作命令[0] [0]爲「00」和從按鈕[2] [1]到「21」的命令。這讓你很容易從actionPerformed獲得位置。另外,你需要三個狀態,而不僅僅是2.如果你不確定我在說什麼,玩一個井字遊戲並在大約一半的時候寫下這個數組。