【发布时间】:2021-06-18 21:34:27
【问题描述】:
所以我想做某种井字游戏,我不确定我的其余代码是否正确(我显然还没有完成)但我认为问题在于JFrame不刷新,我不知道该怎么做,那么如何刷新帧?
package pack1;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Gui {
public Gui() {
Var.jf = new JFrame();
Var.jf.setSize(Var.screenwidth, Var.screenheight);
Var.button1 = new JButton(Var.arr[Var.a]);
Var.jf.add(Var.button1);
Var.button2 = new JButton(Var.arr[Var.b]);
Var.jf.add(Var.button2);
Var.button3 = new JButton(Var.arr[Var.c]);
Var.jf.add(Var.button3);
Var.button4 = new JButton(Var.arr[Var.d]);
Var.jf.add(Var.button4);
Var.button5 = new JButton(Var.arr[Var.e]);
Var.jf.add(Var.button5);
Var.button6 = new JButton(Var.arr[Var.f]);
Var.jf.add(Var.button6);
Var.button7 = new JButton(Var.arr[Var.g]);
Var.jf.add(Var.button7);
Var.button8 = new JButton(Var.arr[Var.h]);
Var.jf.add(Var.button8);
Var.button9 = new JButton(Var.arr[Var.i]);
Var.jf.add(Var.button9);
Var.jf.setLayout(new GridLayout(3,3,10,10));
Var.button1.addActionListener(new KeyListiner());
Var.jf.setTitle("Tic tac toe");
Var.jf.setVisible(true);
Var.jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Var.jf.setLayout(null);
Var.jf.setLocationRelativeTo(null);
Var.jf.setResizable(false);
}
}
package pack1;
import javax.swing.*;
public class Var {
static JFrame jf;
static JButton button1;
static JButton button2;
static JButton button3;
static JButton button4;
static JButton button5;
static JButton button6;
static JButton button7;
static JButton button8;
static JButton button9;
static int a = 2;
static int b = 2;
static int c = 2;
static int d = 2;
static int e = 2;
static int f = 2;
static int g = 2;
static int h = 2;
static int i = 2;
static int screenwidth = 900, screenheight = 900;
static String[]arr = new String[3];{
arr[0] = "X";
arr[1] = "O";
arr[2] = " ";
}}
package pack1;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class KeyListiner implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==Var.button1);
System.out.println(Var.a);
Var.a= 0 ;
}
}
如果我没有正确解释某些事情或类似的事情,请告诉我。
【问题讨论】:
-
请更新您的问题以说明问题所在。
-
为来的状态创建模型。添加一个接受
GameModel并更新组件的内容/状态以匹配模型的方法。当需要刷新时,创建一个空白初始模型并调用该方法。 一般提示: 1) 为尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。硬编码数据替换数据库。 2) 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT).. -
.. 并始终如一地使用它。 3) 源代码中的一个空白行是永远需要的。
{之后或}之前的空行通常也是多余的。 4) 使用逻辑一致的形式缩进代码行和块。缩进是为了让代码流更容易理解!大多数 IDE 都有专门用于格式化代码的键盘快捷键。 5)static JFrame jf;不要制作组件或窗口static除非你能证明为什么它们必须是静态的。它通常导致的问题多于解决的问题。 -
.. 6)
public class KeyListiner implements ActionListener {为类、方法和属性使用有意义且相关的名称。还要避免误导名称。这是一个很好的例子。有一个像KeyListener这样的东西,它监听.. 的击键。ActionListener用于在按钮、菜单或文本字段等“可操作”组件上进行键盘或鼠标操作。