2016-02-12 84 views
0
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Game extends JFrame implements ActionListener { 

private JPanel panel; 
private JButton[] button; 
private int count = 0; 
private int sign = 0; 


public Game(){ 
    panel = new JPanel(); 
    panel.setLayout(new GridLayout(3,3)); 
    add(panel); 
    button = new JButton[9]; 
    for (int i = 0; i < 9; i++){ 
     button[i] = new JButton(); 
     button[i].setPreferredSize(new Dimension(100,100)); 
     panel.add(button[i]); 
     button[i].setEnabled(true); 
     button[i].addActionListener(this); 
     button[i].setFont(new Font("Arial", Font.PLAIN, 30)); 
    } 

    pack(); 
    setVisible(true); 
} 


public void actionPerformed(ActionEvent e){ 
    count ++; 
    int i = 0; 
    for(i = 0; i < 9; i++){ 
     if(button[i] == e.getSource()){ 
      if(sign % 2 == 0){ 
       button[i].setText("X"); 
       button[i].setEnabled(false); 
      } 
      else { 
       button[i].setText("O"); 
       button[i].setEnabled(false); 
      } 
      break; 
     } 
    } 

    if(isAWinner(i) && count > 2){ 

     JOptionPane.showMessageDialog(null, "" + button[i].getText() + "s Win"); 
     for(int j = 0; j < 9; j++){ 
      button[j].setText(""); 
      button[j].setEnabled(true); 
     } 
     count = 0; 
     sign = 0; 
     return; 
    } 



    if(count >= 9){ 
     JOptionPane.showMessageDialog(null, "Cat's Game!"); 
     for(int j = 0; j < 9; j++){ 
      button[j].setText(""); 
      button[j].setEnabled(true); 
     } 
     count = 0; 
     sign = 0; 
     return; 
    } 

    sign++; 

} 

的所以這個工作得很好井字遊戲本身的遊戲沒有問題 我的問題是,當我試圖讓這些遊戲的網格板的一個網格,由按鈕

import java.awt.Container; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 

public class TicTacTest{ 

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    frame.setTitle("Super TicTacToe"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(900,900); 
    Container pane = frame.getContentPane(); 
    pane.setLayout(new GridLayout(3,3)); 

     Game[] games = new Game[9]; 

     for(int i = 0; i < 9; i++){ 

      games[i] = new Game(); 
      pane.add(games[i]); 
     } 


     frame.setVisible(true); 

    } 

} 

我認爲那會奏效,但顯然我錯了,因爲什麼都沒有出現。

我的主要工作是製作9井字棋板?

回答

4

GameJFrame延伸,它不能被添加到其他類型的容器(這將只是愚蠢)

異常會說了這麼多......

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container 
    at java.awt.Container.checkNotAWindow(Container.java:488) 
    at java.awt.Container.addImpl(Container.java:1089) 
    at java.awt.Container.add(Container.java:415) 

相反,使GameJPanel延伸,而不是,然後把它添加到你想要的任何容器

喜歡的東西...

TicTacToe

(PS,紅色邊框僅用於演示目的)

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.border.LineBorder; 

public class Test { 

    public static void main(String[] args) { 

     JFrame frame = new JFrame(); 
     frame.setTitle("Super TicTacToe"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(900, 900); 
     Container pane = frame.getContentPane(); 
     pane.setLayout(new GridLayout(3, 3)); 

     Game[] games = new Game[9]; 

     for (int i = 0; i < 9; i++) { 

      games[i] = new Game(); 
      games[i].setBorder(new LineBorder(Color.RED)); 
      pane.add(games[i]); 
     } 

     frame.setVisible(true); 

    } 

    public static class Game extends JPanel implements ActionListener { 

     private JButton[] button; 
     private int count = 0; 
     private int sign = 0; 

     public Game() { 
      setLayout(new GridLayout(3, 3)); 
      button = new JButton[9]; 
      for (int i = 0; i < 9; i++) { 
       button[i] = new JButton(); 
       button[i].setPreferredSize(new Dimension(100, 100)); 
       add(button[i]); 
       button[i].setEnabled(true); 
       button[i].addActionListener(this); 
       button[i].setFont(new Font("Arial", Font.PLAIN, 30)); 
      } 
     } 

     public void actionPerformed(ActionEvent e) { 
      count++; 
      int i = 0; 
      for (i = 0; i < 9; i++) { 
       if (button[i] == e.getSource()) { 
        if (sign % 2 == 0) { 
         button[i].setText("X"); 
         button[i].setEnabled(false); 
        } else { 
         button[i].setText("O"); 
         button[i].setEnabled(false); 
        } 
        break; 
       } 
      } 

      if (isAWinner(i) && count > 2) { 

       JOptionPane.showMessageDialog(null, "" + button[i].getText() + "s Win"); 
       for (int j = 0; j < 9; j++) { 
        button[j].setText(""); 
        button[j].setEnabled(true); 
       } 
       count = 0; 
       sign = 0; 
       return; 
      } 

      if (count >= 9) { 
       JOptionPane.showMessageDialog(null, "Cat's Game!"); 
       for (int j = 0; j < 9; j++) { 
        button[j].setText(""); 
        button[j].setEnabled(true); 
       } 
       count = 0; 
       sign = 0; 
       return; 
      } 

      sign++; 

     } 

     public boolean isAWinner(int i) { 
      throw new UnsupportedOperationException("Not supported yet."); 
     } 

    } 
}