gpt4 book ai didi

java - 我想在单击按钮 1 时打印数字 1,但它不起作用

转载 作者:行者123 更新时间:2023-12-02 02:37:59 26 4
gpt4 key购买 nike

这是使用 Java 制作井字棋游戏的第一步。

我想在单击按钮 1 时打印数字 1。有 9 个按钮,但它不起作用,这是怎么回事我打印了 e.getsource 方法和 B1 按钮它们不一样。为什么会发生这种情况?

package tictactoe;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TicTacToe implements ActionListener{

JFrame frame1;
JButton B1 = new JButton();
JButton B2 = new JButton();
JButton B3 = new JButton();
JButton B4 = new JButton();
JButton B5 = new JButton();
JButton B6 = new JButton();
JButton B7 = new JButton();
JButton B8 = new JButton();
JButton B9 = new JButton();

public void createGui(){
frame1 = new JFrame();
frame1.setTitle("TicTacToe");
frame1.setSize(600, 600);
frame1.setLayout(new GridLayout(3,3,0,0));
frame1.setLocationRelativeTo(null);

frame1.add(B1);
frame1.add(B2);
frame1.add(B3);
frame1.add(B4);
frame1.add(B5);
frame1.add(B6);
frame1.add(B7);
frame1.add(B8);
frame1.add(B9);

TicTacToe A1 = new TicTacToe();

B1.addActionListener(A1);
B2.addActionListener(A1);
B3.addActionListener(A1);
B4.addActionListener(A1);
B5.addActionListener(A1);
B6.addActionListener(A1);
B7.addActionListener(A1);
B8.addActionListener(A1);
B9.addActionListener(A1);

// frame1.pack();
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==B1){
B1.setText("1");
}
}

public static void main(String[] args) {
TicTacToe T1 = new TicTacToe();
T1.createGui();
}
}

最佳答案

您的程序无法正常工作的原因是您创建了一个新的 TicTacToe,并将其用作 JButton.addActionListener() 的参数。尝试使用 this 代替并删除 A1

B2.addActionListener(this);

然后就可以了。

但是,我建议采用与使用 JButton.addActionListener() 不同的方法。

相反,您可以使用采用 Action 作为参数的 JButton 构造函数。实现您自己的扩展 AbstractActionAction,然后在您需要实现的 actionPerformed() 方法中设置文本。您可以让 Action 接受一个参数,其中包含您想要在按下时写入的文本。

private class PressedAction extends AbstractAction {
private final String text;

public PressedAction(String text) {
this.text = text;
}

@Override
public void actionPerformed(ActionEvent e) {
((JButton) e.getSource()).setText(text);
}
}

关于java - 我想在单击按钮 1 时打印数字 1,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45961142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com