这是使用Java制作tictactoe游戏的第一步。
我想在点击按钮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();
}
}
答案 0 :(得分:2)
您编程的原因不起作用是您创建了一个新的TicTacToe,用作JButton.addActionListener()
的参数。请尝试使用this
,然后移除A1
。
B2.addActionListener(this);
然后它会起作用。
但是我建议采用与使用JButton.addActionListener()
不同的方法。
相反,您可以使用JButton
作为参数的Action
构造函数。实现扩展Action
的自己的AbstractAction
,然后在需要实施的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);
}
}