2012-07-25 5 views
0

자바 스윙으로 Tic Tac Toe 프로그램을 만들려고하고 있는데 프레임을 만들었습니다. 어떻게하면 JButton 배열의 버튼을 int 배열을 활성화시킬 수 있습니까? Tic Tac Toe 그리드의 스팟 값을 int 배열에 저장하면 버튼을 누르면 int 배열의 해당 부분이 0 또는 1이되고 버튼의 텍스트는 다음과 같이 바뀝니다. JButton에 인덱스가 int 배열 미러 가정은 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]); 
    } 

} 

당신은 또한 [0] [0] "00"버튼의 조치 명령을 설정하는 JToggleButton

0

이 경우 버튼 배열 (actionPerformede.getSource()) 가압되는 JButton를 검색 할 수 있지만, 예를 변수로 버튼 배열을 넣어야 클래스의 다른 메소드에서 사용할 수 있도록합니다. actionPerformed(). 인덱스를 찾으면 int 배열의 해당 값을 업데이트하기 만하면됩니다.

0

사용하는 JButton의 setActionCommand 방법을보고하는 것 같아서 및 버튼 [2] [1]에서 "21"까지의 명령. 이 상황은 actionPerformed에서 쉽게 바로 잡을 수있게 해줍니다. 또한, 2 가지가 아니라 3 가지 상태가 필요합니다. 내가 말하는 것에 대해 확실하지 않으면 tic-tac-toe 게임을 실행하고 중간에 배열을 적어 둡니다.