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