我无法让我的 JLabels 在 2D 数组中在运行时更新。
我正在开发的程序是 Connect Four 的一个变体。我创建了一个 JLabels 的 2D 数组,它们都默认为一个包含空白插槽图像的 ImageIcon。玩家 1 和 2 选择他们的颜色,在轮到玩家时,他可以单击将一块棋子放入一列(重力会导致棋子落到底部或直到它落在另一块棋子的顶部)。
我很肯定我的 addToColumn 方法运行良好。我唯一的问题是我似乎无法更新任何 JLabels。这是我正在研究的方法:
p1、p2 和 current 是 Player 对象。grid[][] 是一个二维整数数组,设置为 0、1 或 2,以便更轻松地跟踪谁拥有哪些图块。tiles[][] 是我的二维 JLabels 数组。
public void addToColumn(int column) { // drop a tile in the specified column
int i = 0;
while (grid[column][5-i] != 0) i++; // move upward through the 6 rows of tiles
// until we find an empty one
if (current == p1) grid[column][5-i] = 1; // update to the current player's value
else grid[column][5-i] = 2;
tiles[column][5-i] = new JLabel(findColorIcon(current.getColor()));
tiles[column][5-i].setIcon(findColorIcon(current.getColor()));
repaint();
现在最后两行更改了tiles [] []中的JLabel,显然我不需要两者,不确定哪种方式更好......这只是我尝试过的一些方法,但无济于事。(我的 getColor() 方法返回一个 Color,findColorIcon(Color c) 返回对应的 JLabel 与该颜色的瓷砖)。
是的,我也在我的 paintComponent 方法中添加了:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
}
我已经坚持了一段时间了,我觉得我错过了一些明显的东西。有什么建议么?