Java 我的Tictatcoe游戏中的每个按钮都有相同的代码。如何使这个简短?
这是一个2人游戏。我制作的GUI是框架和按钮,之后我开始编码。实际上我的程序就是用这种编码的Java 我的Tictatcoe游戏中的每个按钮都有相同的代码。如何使这个简短?,java,swing,debugging,jbutton,tic-tac-toe,Java,Swing,Debugging,Jbutton,Tic Tac Toe,这是一个2人游戏。我制作的GUI是框架和按钮,之后我开始编码。实际上我的程序就是用这种编码的 private String letter= " "; private int count= 0; private void btn7ActionPerformed(java.awt.event.ActionEvent evt) { count++; if(count =
private String letter= " ";
private int count= 0;
private void btn7ActionPerformed(java.awt.event.ActionEvent evt) {
count++;
if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){
letter = "X";
} else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){
letter = "O";
}
if(evt.getSource() == btn1){
btn1.setText(letter);
} else if(evt.getSource() == btn2){
btn2.setText(letter);
} else if(evt.getSource() == btn3){
btn3.setText(letter);
} else if(evt.getSource() == btn4){
btn4.setText(letter);
} else if(evt.getSource() == btn5){
btn5.setText(letter);
} else if(evt.getSource() == btn6){
btn6.setText(letter);
} else if(evt.getSource() == btn7){
btn7.setText(letter);
} else if(evt.getSource() == btn8){
btn8.setText(letter);
} else if(evt.getSource() == btn9){
btn9.setText(letter);
}
}
private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {
count++;
if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){
letter = "X";
} else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){
letter = "O";
}
if(evt.getSource() == btn1){
btn1.setText(letter);
} else if(evt.getSource() == btn2){
btn2.setText(letter);
} else if(evt.getSource() == btn3){
btn3.setText(letter);
} else if(evt.getSource() == btn4){
btn4.setText(letter);
} else if(evt.getSource() == btn5){
btn5.setText(letter);
} else if(evt.getSource() == btn6){
btn6.setText(letter);
} else if(evt.getSource() == btn7){
btn7.setText(letter);
} else if(evt.getSource() == btn8){
btn8.setText(letter);
} else if(evt.getSource() == btn9){
btn9.setText(letter);
是的,它实际上正在工作,但我的问题是,我需要在每个按钮中添加代码,例如按钮7、按钮1(这些只是我的按钮示例),这些代码是按钮执行的操作
我只需要每个按钮执行一个命令,我不想复制每个按钮中的粘贴,因为它们是相同的代码。我认为有一个代码可以做到这一点,你认为呢?请帮忙 因此,基本上,您希望将逻辑折叠到单个处理程序中。此处理程序需要对其所操作的按钮的单个引用 类似于
public class ActionHandler implements ActionListener {
private JButton master;
public ActionHandler(JButton master) {
this.master = master;
}
protected void setText(String text) {
master.setText(text);
}
@Override
public void actionPerformed(ActionEvent e) {
String text = null;
count++;
if (count / 2f == Math.round(count / 2f)) {
text = "O";
} else {
text = "X";
}
setText(text);
}
}
现在您的设置代码可能与此不同,这只是一个示例
buttons = new JButton[9]; // You can use this to reset the board ;)
setLayout(new GridLayout(3, 3));
for (int index = 0; index < 9; index++) {
JButton btn = new JButton(Integer.toString(index));
buttons[index] = btn;
btn.addActionListener(new ActionHandler(btn));
add(btn);
}
buttons=newjbutton[9];//您可以使用此选项重置电路板;)
setLayout(新的GridLayout(3,3));
对于(int-index=0;index<9;index++){
JButton btn=新JButton(Integer.toString(index));
按钮[索引]=btn;
addActionListener(新ActionHandler(btn));
添加(btn);
}
基本思想是,当您创建一个新按钮时,您可以为它分配自己的
ActionHandler
并向它传递一个按钮的引用。这允许动作处理程序根据游戏的状态控制按钮。我真的不知道您是如何试图解决这个游戏逻辑的,尽管您的代码可以压缩为以下形式:
int count = -1;
String letter = "";
JButton[] button = new JButton[9]; // These three being your Instance Variables
for (int i = 0; i < 9; i++, counter++)
{
final int counter = i;
button[i] = new JButton("");
button[i].addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
count++;
if (count % 2 != 0)
letter = "X";
else
letter = "O";
button[counter].setText(letter);
}
});
}
int count=-1;
字符串字母=”;
JButton[]按钮=新JButton[9];//这三个变量是您的实例变量
对于(int i=0;i<9;i++,计数器++)
{
最终整数计数器=i;
按钮[i]=新的JButton(“”);
按钮[i].addActionListener(新建ActionListener())
{
@凌驾
已执行的公共无效行动(行动事件ae)
{
计数++;
如果(计数%2!=0)
字母=“X”;
其他的
字母=“O”;
按钮[计数器].setText(字母);
}
});
}
创建单个ActionListener
,然后将其注册到所有按钮。然后使用event.getSource()
识别按钮,并相应地执行其余操作。嗨!在生成的代码中,我找到了这一行btn1.addActionListener(new java.awt.event.ActionListener(){public void actionPerformed(java.awt.event.ActionEvent evt){btn1ActionPerformed(evt);我认为java已经自动生成了代码。你认为哪里不对?是的,你是对的,这就是我现在正在做的事情!:D