所以我正在制作一个井字游戏,我正在使用IntelliJ中的JButton制作的GUI。这是我当前的代码,用于检测按下按钮的时间并使用X
或O
进行标记。
public static void taketurn(){
Boolean gamerunning = true;
while(gamerunning){
if(button1.getModel().isPressed()) {
button1.setText("X");
gamerunning = false;
}
}
}
我的问题是,在运行代码时,它创建的UI都很好,但点击按钮无效。但是,当我进入调试但在button1.setText("X")
处休息然后从那里前进时,它会正确执行代码并显示X
。为什么这只适用于使用中断进行调试而不是正常运行?
答案 0 :(得分:3)
可能发生的事情是在全速运行时,如果在while循环重新开始之前没有执行if。您是否考虑过在按钮上使用actionListener? 在创建按钮时尝试这样的事情
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//logic here to add X or O
}
}});
然后,您不必担心在循环中运行以等待用户选择。只要他们按下按钮,您的逻辑就会处理添加X或O
答案 1 :(得分:1)
我认为在这里使用ActionListener类是一个好主意。 您可以创建自己的ActionListener实现,而无需使用匿名类,如下所示:
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//The stuff you want to do when the button is pressed
}
}
然后,您可以在需要时创建此类的新实例,并使用addActionListener(ActionListener l)函数将其添加到JButton中。
MyJButton.addActionListener(new MyActionListener());