gpt4 book ai didi

java - 如何让显示 JPanel 数组的 JFrame 进行 self 更新?

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:22 25 4
gpt4 key购买 nike

我正在为 CS 类(class)构建一款棋盘游戏,我已经从引擎(它的 Backbone )开始,并且我已经完善了它,但我仍然停留在 GUI 部分。在引擎中,我有一个双数组,用棋子初始化棋盘,它有一个 getWinner 和 move 方法。在 GUI 部分中,我创建了 JFrame 并将其布局设置为 gridlayout,并且我还有另一个双数组,用于检查引擎的数组并相应地打印带有板件的板。但是,每当我移动时,引擎的数组都会注册该移动,但不会显示在我的 JFrame 上。我不知道该怎么做。这是 GUI 包中我的 Main 类:

package eg.edu.guc.loa.gui;

import java.awt.*;
import java.util.ArrayList;

import javax.swing.*;

import eg.edu.guc.loa.engine.*;
import eg.edu.guc.loa.engine.Point;

@SuppressWarnings("serial")
public class LOA extends JFrame{

static Tiles[][] Jboard;
static Board b = new Board();
static Color temp;
static Color col1 = Color.DARK_GRAY;
static Color col2 = Color.LIGHT_GRAY;
static JFrame LOA = new JFrame();
JButton b1, b2;

public LOA(){
Jboard = new Tiles[8][8];
LOA.setLayout(new GridLayout(8, 8));
initBoard();
LOA.setSize(600, 600);
LOA.setVisible(true);
LOA.setLocationRelativeTo(null);
LOA.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b.printBoard();
}

public static void initBoard(){
remove();
b.printBoard();

for(int i = 0; i<8; i++){
if (i%2 == 0){
temp = col1;
}
else{
temp = col2;
}
for(int j = 0; j<8; j++){
Jboard[i][j] = new Tiles(temp, i, j);
LOA.getContentPane().add(Jboard[i][j]);
if (temp.equals(col1)){
temp = col2;
}
else{
temp = col1;
}

if(b.getPiece(new Point(j, i)).getPlayer() == BoardCell.PLAYER_1_PIECE){
Jboard[i][j].hasChecker(true);
Jboard[i][j].setWhite(true);
Jboard[i][j] = new Tiles(temp, i, j);

}
if(b.getPiece(new Point(j, i)).getPlayer() == BoardCell.PLAYER_2_PIECE){
Jboard[i][j].hasChecker(true);
Jboard[i][j].setWhite(false);
Jboard[i][j] = new Tiles(temp, i, j);
}

}
}
}

public static void remove(){
for(int i = 0; i<8;i++){
for(int j = 0; j<8; j++){
if(Jboard[i][j] != null)
LOA.remove(Jboard[i][j]);
}
}
}



public static void main (String [] args){
new LOA();

}

}

任何帮助将不胜感激..提前致谢。

编辑:b.print() 在控制台上打印引擎的数组,remove() 只是我尝试删除旧框架并基于新更新的数组(带有移动的部分)构建新框架,这显然失败了。

最佳答案

如这个简单得多的 MVCGame 所示,您可以使用observer pattern安排您的 View 注册为模型的监听器。 。用户手势应该更新模型;当模型通知时, View 应该简单地呈现模型的当前状态。模型中不应该有绘图, View 中不应该有游戏逻辑。

关于java - 如何让显示 JPanel 数组的 JFrame 进行 self 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448394/

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