GUI для TicTacToe не отображается должным образом на компьютерах, кроме моего - PullRequest
0 голосов
/ 12 января 2020

Для игры TicTacToe, когда я запускаю ее на своем P C с затмением дома, она работает нормально. Но когда я пытаюсь запустить программу на другом компьютере, она просто отображает белое окно ни с чем. Игра должна отображать 9 кнопок, где при нажатии она меняет кнопку на «х» или «о». На другом компьютере окно выдвигается, но там только экран. Кто-нибудь знает решение проблемы?

изображения:

Изображение проблемы

enter image description here

Это должно быть :

enter image description here

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.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class TicTacToeGUI extends JFrame {

  Container pane;
  String currentPlayer;
  JButton [] [] board;
  boolean hasWinner;
  JMenuBar menuBar;
  JMenu menu;
  JMenuItem quit;
  JMenuItem newGame;

  // Constructor
  public TicTacToeGUI() {
    super();
    pane = getContentPane();
    pane.setLayout(new GridLayout (3,3));;
    setTitle("Tic Tac Toe Game");
    setSize(500,500);
    setResizable(false);
    setVisible(true);

    currentPlayer = "x";
    board = new JButton [3][3];
    hasWinner = false;

    intializeBoard();
    intializeMenuBar();
 }

 private void intializeMenuBar() {
  menuBar = new JMenuBar ();
  menu = new JMenu("File");

  newGame = new JMenuItem("New Game");
  newGame.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
       dispose();
        TicTacToeGUI frame = new TicTacToeGUI();
        frame.setVisible(true);
      }
     });

  quit = new JMenuItem("Quit");
  quit.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
      System.exit(0);
     }
    });

    menu.add(newGame);
    menu.add(quit);
    menuBar.add(menu);
    setJMenuBar(menuBar);
  }

 private void intializeBoard() {
  for(int i = 0; i < 3; i++) {
   for(int j = 0; j < 3; j++) {
    JButton btn = new JButton();

    board[i][j] = btn;

    btn.addActionListener(new ActionListener() {

     @Override
     public void actionPerformed(ActionEvent e) {
      if(((JButton)e.getSource ()).getText().equals("") && hasWinner == false) {
       btn.setText(currentPlayer);
       hasWinner();
       togglePlayer();

      }
     }
    });
    pane.add(btn);
   }
  }
 }


 private void togglePlayer() {
  if (currentPlayer.contentEquals("x")){
   currentPlayer = "o";
  }
  else {
   currentPlayer = "x";
  }
 }

 private void hasWinner() {
  for(int i = 0; i < 3; ++i) {
   if(board[0][i].getText().equals(currentPlayer) && board[1][i].getText()
                           .equals(currentPlayer) && board[2][i].getText()
                           .equals(currentPlayer)) {
    JOptionPane.showMessageDialog(null, "player " + currentPlayer + " has won");
    hasWinner = true;
   }
   else if(board[i][0].getText().equals(currentPlayer) && board[i][1].getText() 
                                 .equals(currentPlayer) && board[i][2].getText() 
                                 .equals(currentPlayer))  {
    JOptionPane.showMessageDialog(null, "player " + currentPlayer + " has won");
    hasWinner = true;
   }
  }

  if (board[0][0].getText().equals(currentPlayer) && board[1][1].getText() 
                           .equals(currentPlayer) && board[2][2].getText() 
                           .equals(currentPlayer) ||
    (board[0][2].getText().equals(currentPlayer) && board[1][1].getText() 
                          .equals(currentPlayer) && board[2][0].getText() 
                          .equals(currentPlayer))) {
   JOptionPane.showMessageDialog(null, "player " + currentPlayer + " has won");
   hasWinner = true;
  }
 }

 public static void main(final String[] args) {
     new TicTacToeGUI();
 }
}
...