如何修复 getSource() 方法以在 actionPerformed class 中编辑 JButton 文本?

How to fix getSource() method to edit JButton Text in actionPerformed class?

我必须在小程序中为 Ready to Program Java 1.42 中的学校项目创建一个 TicTacToe 游戏。在 actionPerformed class 中,我想简单地 set/edit 将左上角第一个方块的文本 "X"。我在 JButton 上使用了 setActionCommand() 并在 actionPerformed class 中调用了 getActionCommand()。但是在我的 if 语句中,我使用 getSource() 以便我可以引用对象本身和 set/edit 文本。我不能同时使用 getActionCommand() 和 getSource() 吗?谢谢。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.applet.Applet;
import javax.swing.JButton;

public class TicTacToe extends Applet implements ActionListener 
{
public void InitializeGame()
{

 setLayout(null);
 JButton Square1 = new JButton();
 Square1.setBackground(Color.white);
 Square1.setBounds(90,20,75,75);
 Square1.addActionListener(this);
 Square1.setActionCommand("s1");

 JButton Square2 = new JButton();
 Square2.setBackground(Color.white);
 Square2.setBounds(165,20,75,75);
 Square2.addActionListener(this);
 Square2.setActionCommand("s2");

 JButton Square3 = new JButton();
 Square3.setBackground(Color.white);
 Square3.setBounds(240,20,75,75);
 Square3.addActionListener(this);
 Square3.setActionCommand("s3");

 JButton Square4 = new JButton();
 Square4.setBackground(Color.white);
 Square4.setBounds(90,95,75,75);
 Square4.addActionListener(this);
 Square4.setActionCommand("s4");

 JButton Square5 = new JButton();
 Square5.setBackground(Color.white);
 Square5.setBounds(165,95,75,75);
 Square5.addActionListener(this);
 Square5.setActionCommand("s5");

 JButton Square6 = new JButton();
 Square6.setBackground(Color.white);
 Square6.setBounds(240,95,75,75);
 Square6.addActionListener(this);
 Square6.setActionCommand("s6");

 JButton Square7 = new JButton();
 Square7.setBackground(Color.white);
 Square7.setBounds(90,170,75,75);
 Square7.addActionListener(this);
 Square7.setActionCommand("s7");

 JButton Square8 = new JButton();
 Square8.setBackground(Color.white);
 Square8.setBounds(165,170,75,75);
 Square8.addActionListener(this);
 Square8.setActionCommand("s8");

 JButton Square9 = new JButton();
 Square9.setBackground(Color.white);
 Square9.setBounds(240,170,75,75);
 Square9.addActionListener(this);
 Square9.setActionCommand("s9");

 add(Square1);
 add(Square2);
 add(Square3);
 add(Square4);
 add(Square5);
 add(Square6);
 add(Square7);
 add(Square8);
 add(Square9);

}

public void init()
{
resize (400,300);
setBackground(Color.orange);

JButton Play = new JButton("Click to Play");                                 
Play.setBackground(Color.white);
Play.setForeground(Color.black);
Play.addActionListener(this);
add(Play);
}

public void actionPerformed(ActionEvent e)                         
{
removeAll();                                                       
setBackground(Color.pink);
InitializeGame();                                                   


if ( e.getActionCommand().equals( "s1" ) )
   {
   ((JButton)e.getSource()).setText("X");
   }

repaint(); 
} 

}

我希望在左上角的 JButton 上看到 "X"。但是当 运行.

时文本不会出现

actionPerformed() 方法中,您需要在 if 块中调用 removeAll()setBackground()InitializeGame(),如下所示:

否则,每次单击任何按钮时,整个 UI 都会重置。 (因为您已将相同的 ActionListener 添加到所有按钮。)

public void actionPerformed(ActionEvent e)
{
  if (((JButton) e.getSource()).getText().equals("Click to Play")) {
    removeAll();
    setBackground(Color.pink);
    InitializeGame();
  }

  if ( e.getActionCommand().equals( "s1" ) )
  {
    ((JButton)e.getSource()).setText("X");
  }

  repaint();
}