Java Tic Tac Toe按钮颜色
我一直在更新一个我在网上发现的有点过时的tic-tac-toe代码,就像它现在真的可以工作一样:p我已经差不多完成了,但我一直有一个相同的问题。tic tac趾板内的3x3按钮工作完美,除了一件事,它们被点击后的颜色始终是背景,我已经尝试纠正这一点,但它所做的只是使按钮根本不改变颜色。这两种颜色是红色和绿色,我希望这样,当每个玩家点击一个按钮,它会改变他们的颜色 主要游戏代码:Java Tic Tac Toe按钮颜色,java,swing,tic-tac-toe,Java,Swing,Tic Tac Toe,我一直在更新一个我在网上发现的有点过时的tic-tac-toe代码,就像它现在真的可以工作一样:p我已经差不多完成了,但我一直有一个相同的问题。tic tac趾板内的3x3按钮工作完美,除了一件事,它们被点击后的颜色始终是背景,我已经尝试纠正这一点,但它所做的只是使按钮根本不改变颜色。这两种颜色是红色和绿色,我希望这样,当每个玩家点击一个按钮,它会改变他们的颜色 主要游戏代码: import java.awt.*; import java.awt.event.*; import javax.sw
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TicTacToeGame extends JFrame implements ActionListener
{
JLabel l1;
JLabel p1namel;
JLabel p2namel;
JLabel l3;
JButton b1;
JButton b2;
JButton b3;
JButton b4;
JButton b5;
JButton b6;
JButton b7;
JButton b8;
JButton b9;
int b1ctr = 1 ,b2ctr = 2 ,b3ctr = 3 ,b4ctr = 4, b5ctr = 5, b6ctr = 6, b7ctr = 7, b8ctr = 8, b9ctr = 9;
Font textfont = new Font( "Serif", Font.PLAIN,70 );
int ctr = 1;
String p1name,p2name;
public TicTacToeGame(String p1,String p2)
{
TicTacToeGameLayout customLayout = new TicTacToeGameLayout();
getContentPane().setFont(new Font("Helvetica", Font.PLAIN, 12));
getContentPane().setLayout(customLayout);
getContentPane().setBackground(Color.CYAN);
l1 = new JLabel("");
getContentPane().add(l1);
p1name = p1;
p2name = p2;
p1namel = new JLabel("");
p1namel.setText(p1);
p1namel.setFont(textfont);
p1namel.setForeground(Color.RED);
getContentPane().add(p1namel);
p2namel = new JLabel("");
p2namel.setText(p2);
p2namel.setForeground(Color.GREEN);
p2namel.setFont(textfont);
getContentPane().add(p2namel);
l3 = new JLabel("<->");
l3.setFont(textfont);
getContentPane().add(l3);
b1 = new JButton("");
getContentPane().add(b1);
b2 = new JButton("");
getContentPane().add(b2);
b3 = new JButton("");
getContentPane().add(b3);
b4 = new JButton("");
getContentPane().add(b4);
b5 = new JButton("");
getContentPane().add(b5);
b6 = new JButton("");
getContentPane().add(b6);
b7 = new JButton("");
getContentPane().add(b7);
b8 = new JButton("");
getContentPane().add(b8);
b9 = new JButton("");
getContentPane().add(b9);
l3.setForeground(Color.WHITE);
b1.setFont(textfont);
b2.setFont(textfont);
b3.setFont(textfont);
b4.setFont(textfont);
b5.setFont(textfont);
b6.setFont(textfont);
b7.setFont(textfont);
b8.setFont(textfont);
b9.setFont(textfont);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
setSize(getPreferredSize());
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent ae)
{
if (ctr % 2 == 1)
{
if(ae.getSource() == b1)
{
b1ctr = 0;
b1.setEnabled(false);
b1.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b2)
{
b2ctr = 0;
b2.setEnabled(false);
b2.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b3)
{
b3ctr = 0;
b3.setEnabled(false);
b3.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b4)
{
b4ctr = 0;
b4.setEnabled(false);
b4.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b5)
{
b5ctr = 0;
b5.setEnabled(false);
b5.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b6)
{
b6ctr = 0;
b6.setEnabled(false);
b6.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b7)
{
b7ctr = 0;
b7.setEnabled(false);
b7.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b8)
{
b8ctr = 0;
b8.setEnabled(false);
b8.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
else if (ae.getSource() == b9)
{
b9ctr = 0;
b9.setEnabled(false);
b9.setBackground(Color.GREEN);
winnerfind();
ctr++;
}
}
else if (ctr % 2 != 1)
{
if(ae.getSource() == b1)
{
b1ctr = 1;
b1.setEnabled(false);
b1.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b2)
{
b2ctr = 1;
b2.setEnabled(false);
b2.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b3)
{
b3ctr = 1;
b3.setEnabled(false);
b3.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b4)
{
b4ctr = 1;
b4.setEnabled(false);
b4.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b5)
{
b5ctr = 1;
b5.setEnabled(false);
b5.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b6)
{
b6ctr = 1;
b6.setEnabled(false);
b6.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b7)
{
b7ctr = 1;
b7.setEnabled(false);
b7.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b8)
{
b8ctr = 1;
b8.setEnabled(false);
b8.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
else if (ae.getSource() == b9)
{
b9ctr = 1;
b9.setEnabled(false);
b9.setBackground(Color.YELLOW);
winnerfind1();
ctr++;
}
}
}
public void winnerfind()
{
if ((b1ctr == 0 && b2ctr == 0 && b3ctr == 0) || (b1ctr == 0 && b4ctr == 0 && b7ctr == 0) || (b2ctr == 0 && b5ctr == 0 && b8ctr == 0) || (b3ctr == 0 && b6ctr == 0 && b9ctr == 0) || (b4ctr == 0 && b5ctr == 0 && b6ctr == 0) || (b7ctr == 0 && b8ctr == 0 && b9ctr == 0) || (b1ctr == 0 && b5ctr == 0 && b9ctr == 0) || (b3ctr == 0 && b5ctr == 0 && b7ctr == 0))
{
JOptionPane.showMessageDialog(null,""+p1name+" is the winner!");
}
}
public void winnerfind1()
{
if ((b1ctr == 1 && b2ctr == 1 && b3ctr == 1) || (b1ctr == 1 && b4ctr == 1 && b7ctr == 1) || (b2ctr == 1 && b5ctr == 1 && b8ctr == 1) || (b3ctr == 1 && b6ctr == 1 && b9ctr == 1) || (b4ctr == 1 && b5ctr == 1 && b6ctr == 1) || (b7ctr == 1 && b8ctr == 1 && b9ctr == 1) || (b1ctr == 1 && b5ctr == 1 && b9ctr == 1) || (b3ctr == 1 && b5ctr == 1 && b7ctr == 1))
{
JOptionPane.showMessageDialog(null,""+p2name+" is victorious!");
}
}
}
class TicTacToeGameLayout implements LayoutManager
{
public TicTacToeGameLayout()
{
}
public void addLayoutComponent(String name, Component comp)
{
}
public void removeLayoutComponent(Component comp)
{
}
public Dimension preferredLayoutSize(Container parent)
{
Dimension dim = new Dimension(0, 0);
Insets insets = parent.getInsets();
dim.width = 719 + insets.left + insets.right;
dim.height = 455 + insets.top + insets.bottom;
return dim;
}
public Dimension minimumLayoutSize(Container parent)
{
Dimension dim = new Dimension(0, 0);
return dim;
}
public void layoutContainer(Container parent)
{
Insets insets = parent.getInsets();
Component c;
c = parent.getComponent(0);
if (c.isVisible()) {c.setBounds(insets.left+0,insets.top+64,720,8);}
c = parent.getComponent(1);
if (c.isVisible()) {c.setBounds(insets.left+16,insets.top+8,428,80);}
c = parent.getComponent(2);
if (c.isVisible()) {c.setBounds(insets.left+472,insets.top+8,528,80);}
c = parent.getComponent(3);
if (c.isVisible()) {c.setBounds(insets.left+300,insets.top+8,150,80);}
c = parent.getComponent(4);
if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+112,120,104);}
c = parent.getComponent(5);
if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+112,112,104);}
c = parent.getComponent(6);
if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+112,120,104);}
c = parent.getComponent(7);
if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+216,120,96);}
c = parent.getComponent(8);
if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+216,112,96);}
c = parent.getComponent(9);
if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+216,120,96);}
c = parent.getComponent(10);
if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+312,120,104);}
c = parent.getComponent(11);
if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+312,112,104);}
c = parent.getComponent(12);
if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+312,120,104);}
}
}
该代码没有什么真正的错误,只是使用黄色而不是红色-如果要更改,只需将所有出现的Color.yellow更改为Color.red,并为两个播放器交换颜色以保持一致性:
p1namel = new JLabel("");
p1namel.setText(p1);
p1namel.setFont(textfont);
p1namel.setForeground(Color.GREEN); // << HERE
getContentPane().add(p1namel);
p2namel = new JLabel("");
p2namel.setText(p2);
p2namel.setForeground(Color.RED); // << AND HERE
p2namel.setFont(textfont);
getContentPane().add(p2namel);
除了颜色不匹配外,它似乎工作正常:
通过进行如上所示的更改,您将得到:
该代码没有什么真正的错误,只是使用黄色而不是红色-如果要更改,只需将所有出现的Color.yellow更改为Color.red,并为两个播放器交换颜色以保持一致性:
p1namel = new JLabel("");
p1namel.setText(p1);
p1namel.setFont(textfont);
p1namel.setForeground(Color.GREEN); // << HERE
getContentPane().add(p1namel);
p2namel = new JLabel("");
p2namel.setText(p2);
p2namel.setForeground(Color.RED); // << AND HERE
p2namel.setFont(textfont);
getContentPane().add(p2namel);
除了颜色不匹配外,它似乎工作正常:
通过进行如上所示的更改,您将得到:
这是一个离题的话题,但是你可能想尝试将这个巨大的if链重构成一个新的方法,这样你就可以减少复制粘贴代码。鲍勃,这里没有愚蠢的问题,当然有,但这不是其中之一。我对你学习编程的尝试表示赞赏。让我们看看是否能帮上忙。我知道,一旦我能正常工作,我肯定会帮上忙的。这是一场战斗,当我有更多的精力,因为我说我是一个初学者,所以它需要我多一点时间xD的另一天。针对第一个comment@bob138你能澄清一下你想要的输出是什么吗?哇。我对有一个tic-tac-toe标签的惊讶远远超过了我对它确实聚集了一些追随者的惊讶:-这是离题的,但你可能想尝试将这个巨大的if链重构成一个新方法,这样你就可以减少复制粘贴代码。鲍勃,这里没有愚蠢的问题,但这不是其中之一。我对你学习编程的尝试表示赞赏。让我们看看是否能帮上忙。我知道,一旦我能正常工作,我肯定会帮上忙的。这是一场战斗,当我有更多的精力,因为我说我是一个初学者,所以它需要我多一点时间xD的另一天。针对第一个comment@bob138你能澄清一下你想要的输出是什么吗?哇。我对有一个tic-tac-toe标签的惊讶超过了我对它确实聚集了一些追随者的惊讶:-这就是我看到的:玩家红色->按钮绿色;播放器绿色->按钮黄色。不仅仅是使用黄色而不是红色。@johnchen902,请参阅更新:最简单的解决方案是将所有黄色更改为红色,并交换球员姓名的颜色,如图所示。为什么不保留按钮的颜色,只将球员的颜色更改为黄色和绿色我使用黄色只是因为我有绿色和黄色的旧颜色,但在发布问题代码之前决定更改,但现在我已经更新了。但当我按原样运行它时,它在单击时所有的按钮都是彩色的。@johnchen902,这当然是另一种解决方案,但我从这个问题中得到的印象是OP想要红色和绿色。如果他们不在乎,那么只需更改玩家颜色并确保输出正确的赢家当然更容易-我没有检查它。这是我看到的:玩家红色->按钮绿色;播放器绿色->按钮黄色。不仅仅是使用黄色而不是红色。@johnchen902,请参阅更新:最简单的解决方案是将所有黄色更改为红色,并交换球员姓名的颜色,如图所示。为什么不保留按钮的颜色,只将球员的颜色更改为黄色和绿色我使用黄色只是因为我有绿色和黄色的旧颜色,但在发布问题代码之前决定更改,但现在我已经更新了。但当我按原样运行它时,它在单击时所有的按钮都是彩色的。@johnchen902,这当然是另一种解决方案,但我从这个问题中得到的印象是OP想要红色和绿色。如果他们不在乎,那么改变玩家的颜色并确保输出正确的赢家当然更容易——我还没有检查过。