无法在TicTacToe的java游戏中绘制字符串

时间:2015-10-23 03:30:18

标签: java swing

我只使用一个名为Game的类。我实际上是GUI新手。 它运行正常,但如果有人赢了它不会绘制字符串它应该在每次点击后检查赢家。我不确定这是不是一个愚蠢的问题:|

package com.Myproject.main;



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Game extends JFrame implements Runnable , ActionListener
{
JButton x0y0 , x1y0 , x2y0 ;
JButton x0y1 , x1y1 , x2y1 ;
JButton x0y2 , x1y2 , x2y2 ;
int turn = 0;
Graphics g;
Thread thread = new Thread();
String symbolx0y0;
String symbolx1y0;
String symbolx2y0;
String symbolx0y1;
String symbolx1y1;
String symbolx2y1;
String symbolx0y2;
String symbolx1y2;
String symbolx2y2;
public Game()
{
    setSize(300 , 300);
    setTitle("Tic Tac Toe");
    setLocationRelativeTo(null);
    getContentPane().setLayout(null);
    x0y0 = new JButton("Click me");
    x1y0 = new JButton("Click me");
    x2y0 = new JButton("Click me");
    x0y1 = new JButton("Click me");
    x1y1 = new JButton("Click me");
    x2y1 = new JButton("Click me");
    x0y2 = new JButton("Click me");
    x1y2 = new JButton("Click me");
    x2y2 = new JButton("Click me");
    x0y0.setBounds( 0 , 0 , 90 , 90);
    x1y0.setBounds( 91 , 0 , 90 , 90);
    x2y0.setBounds( 182 , 0 , 90 , 90);
    x0y1.setBounds( 0 , 91 , 90 , 90);
    x1y1.setBounds( 91 , 91 , 90 , 90);
    x2y1.setBounds( 182 , 91 , 90 , 90);
    x0y2.setBounds( 0 , 182 , 90 , 90);
    x1y2.setBounds( 91 , 182 , 90 , 90);
    x2y2.setBounds( 182 , 182 , 90 , 90);
    getContentPane().add(x0y0);
    getContentPane().add(x1y0);
    getContentPane().add(x2y0);
    getContentPane().add(x0y1);
    getContentPane().add(x1y1);
    getContentPane().add(x2y1);
    getContentPane().add(x0y2);
    getContentPane().add(x1y2);
    getContentPane().add(x2y2);
    x0y0.addActionListener(this);
    x1y0.addActionListener(this);
    x2y0.addActionListener(this);
    x0y1.addActionListener(this);
    x1y1.addActionListener(this);
    x2y1.addActionListener(this);
    x0y2.addActionListener(this);
    x1y2.addActionListener(this);
    x2y2.addActionListener(this);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
public void run()
{
    while(true)
    {

    }
}
public static void main(String[] args)
{
    Game game = new Game();

}
 public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == x0y0)
    {
        if(turn%2==0){
        x0y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx0y0("Circle");
        return;
        }
        if(turn%2!=0){
         x0y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx0y0("Cross");
         return;
        }
    }
    if(e.getSource() == x1y0)
    {
        if(turn%2==0){
        x1y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx1y0("Circle");
        return;
        }
        if(turn%2!=0){
         x1y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx1y0("Cross");
         return;
        }
    }
    if(e.getSource() == x2y0)
    {
        if(turn%2==0){
        x2y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx2y0("Circle");
        return;
        }
        if(turn%2!=0){
         x2y0.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx2y0("Cross");
         return;
        }
    }
    if(e.getSource() == x0y2)
    {
        if(turn%2==0){
        x0y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx0y2("Circle");
        return;
        }
        if(turn%2!=0){
         x0y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx0y2("Cross");
         return;
        }
    }
    if(e.getSource() == x1y2)
    {
        if(turn%2==0){
        x1y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx1y2("Circle");
        return;
        }
        if(turn%2!=0){
         x1y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx1y2("Cross");
         return;
        }
    }
    if(e.getSource() == x2y2)
    {
        if(turn%2==0){
        x2y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx2y2("Circle");
        return;
        }
        if(turn%2!=0){
         x2y2.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx2y2("Cross");
         return;
        }
    }
    if(e.getSource() == x0y1)
    {
        if(turn%2==0){
        x0y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx0y1("Circle");
        return;
        }
        if(turn%2!=0){
         x0y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx0y1("Cross");
         return;
        }
    }
    if(e.getSource() == x1y1)
    {
        if(turn%2==0){
        x1y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx1y1("Circle");
        return;
        }
        if(turn%2!=0){
         x1y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx1y1("Cross");
         return;
        }
    }
    if(e.getSource() == x2y1)
    {
        if(turn%2==0){
        x2y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Circle.png"));
        turn++ ;
        setSymbolx2y1("Circle");
        return;
        }
        if(turn%2!=0){
         x2y1.setIcon(new ImageIcon("C:/Users/lenovo/Desktop/self/Cross.png"));
         turn++ ;
         setSymbolx2y1("Cross");
         return;
        }
    }
    checkWinner();
}
public void drawCircle(Graphics g){
g.drawString("Circle Won" , 30 , 30);
}
public void drawCross(Graphics g){
g.drawString("Cross Won" , 30 , 30);
}
 public void checkWinner(){
     if(symbolx2y0 == symbolx1y1 && symbolx1y1 == symbolx2y2 && symbolx2y2 == "Circle") drawCircle(g);
     if(symbolx2y0 == symbolx1y1 && symbolx1y1 == symbolx2y2 && symbolx2y2 == "Cross")drawCross(g);
     if(symbolx0y0 == symbolx1y1 && symbolx2y2 == symbolx1y1 && symbolx0y0 == "Circle")drawCircle(g);
     if(symbolx0y0 == symbolx1y1 && symbolx2y2 == symbolx1y1 && symbolx0y0 == "Cross")drawCross(g);
     if(symbolx0y0 == symbolx1y0 && symbolx1y0 == symbolx2y0 && symbolx0y0 == "Circle")drawCircle(g);
     if(symbolx0y0 == symbolx1y0 && symbolx1y0 == symbolx2y0 && symbolx0y0 == "Cross")drawCross(g);
     if(symbolx0y1 == symbolx1y1 && symbolx1y1 == symbolx2y1 && symbolx0y1 == "Circle")drawCircle(g);
     if(symbolx0y1 == symbolx1y1 && symbolx1y1 == symbolx2y1 && symbolx0y1 == "Cross")drawCross(g);
     if(symbolx0y2 == symbolx1y2 && symbolx1y2 == symbolx2y2 && symbolx0y2 == "Circle")drawCircle(g);
     if(symbolx0y2 == symbolx1y2 && symbolx1y2 == symbolx2y2 && symbolx0y2 == "Cross")drawCross(g);
     if(symbolx0y0 == symbolx0y1 && symbolx0y1 == symbolx0y2 && symbolx0y2 == "Circle")drawCircle(g);
     if(symbolx0y0 == symbolx0y1 && symbolx0y1 == symbolx0y2 && symbolx0y2 == "Cross")drawCross(g);
     if(symbolx1y0 == symbolx1y1 && symbolx1y1 == symbolx1y2 && symbolx1y2 == "Circle")drawCircle(g);
     if(symbolx1y0 == symbolx1y1 && symbolx1y1 == symbolx1y2 && symbolx1y2 == "Cross")drawCross(g);
     if(symbolx2y0 == symbolx2y1 && symbolx2y2 == symbolx2y1 && symbolx2y1 == "Circle")drawCircle(g);
     if(symbolx2y0 == symbolx2y1 && symbolx2y2 == symbolx2y1 && symbolx2y1 == "Cross")drawCross(g);
}
public String setSymbolx0y0(String symbolx0y0){
    return this.symbolx0y0 = symbolx0y0;

}
public String setSymbolx1y0(String symbolx1y0){
    this.symbolx1y0 = symbolx1y0;
    return symbolx1y0;
}
public String setSymbolx2y0(String symbolx2y0){
    this.symbolx2y0 = symbolx2y0;
    return symbolx2y0;
}
public String setSymbolx0y1(String symbolx0y1){
    this.symbolx0y1 = symbolx0y1;
    return symbolx0y1;
}
public String setSymbolx1y1(String symbolx1y1){
    this.symbolx1y1 = symbolx1y1;
    return symbolx1y1;
}
public String setSymbolx2y1(String symbolx2y1){
    this.symbolx2y1 = symbolx2y1;
    return symbolx2y1;
}
public String setSymbolx0y2(String symbolx0y2){
    this.symbolx0y2 = symbolx0y2 ;
    return symbolx0y2;
}
public String setSymbolx1y2(String symbolx1y2){
    this.symbolx1y2 = symbolx1y2;
    return symbolx1y2;
}
public String setSymbolx2y2(String symbolx2y2){
    this.symbolx2y2 = symbolx2y2;
    return symbolx2y2;
}

}

1 个答案:

答案 0 :(得分:1)

  1. symbolx2y2 == "Circle"不是String比较在Java中的工作原理,您应该使用类似"Circle".equals(symbolx2y2)的内容。这也适用于symbolx1y1 == symbolx2y2
  2. g永远不会分配值,因此它将是null,此外,这不是自定义绘画在Swing中的工作方式。有关详细信息,请参阅Painting in AWT and SwingPerforming Custom Painting。话虽如此,根据你的代码,我不会使用它,相反,我会显示一个对话框,显示你想要显示的消息。有关详细信息,请参阅How to Make Dialogs
  3. 避免使用null布局,像素完美布局是现代ui设计中的错觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的结束,您将花费越来越多的时间来纠正。有关详细信息,请参阅Laying Out Components Within a Container
  4. Thread thread = new Thread();没有做任何事情,基本上是浪费
  5. 您应该确保在事件调度线程的上下文中创建和操作UI,有关详细信息,请参阅Initial Threads
  6. 避免直接从JFrame扩展,您不会向该类添加任何新功能,只是将自己锁定在一个用例中。最好从JPanel开始,并将其添加到JFrame的实例或您想要的容器