java - 如何修复 getSource() 方法以在 actionPerformed 类中编辑 JButton 文本?
问题描述
我必须在 Applet 中为 Ready to Program Java 1.42 中的一个学校项目创建一个井字游戏。在 actionPerformed 类中,我想简单地将左上角第一个正方形的文本设置/编辑为“X”。我在 JButton 上使用了 setActionCommand() 并在 actionPerformed 类中调用了 getActionCommand()。但是在我的 if 语句中,我使用 getSource() 以便我可以引用对象本身并设置/编辑文本。我不能一起使用 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()
方法内部,您需要在一个块中调用removeAll()
,setBackground()
和调用,如下所示:InitializeGame()
if
否则,每次单击任何按钮时,整个 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();
}
推荐阅读
- python - 使用 youtube api python 获取准确的 youtuber 订阅者数量
- c - 返回节点结构会给出“预期表达式”错误
- c# - 有没有办法在 C# 中获取无限类型参数?
- python - 拆分列、提取数字并减去差异
- c# - async await 是否总是使用线程池?
- python - 为什么我的类继承自 array.array 不起作用?
- ios - App Store - 评分和评论 - 表格视图或集合视图?
- reactjs - 使用 React Table 库时,如何在一个特定列中的所有单元格中加粗文本?
- python - 当用户输入国家/地区时,我想从网页解析首都并在终端中打印它们
- android - 通过 Azure 上的 yml 脚本将 deobfuscation mapping.txt 上传到 Google Play