gpt4 book ai didi

java - 如何使用 MouseListener 查找网格中的特定单元格

转载 作者:搜寻专家 更新时间:2023-10-31 20:03:46 25 4
gpt4 key购买 nike

我正在尝试使用由单元格组成的 10 x 10 网格创建 Java 游戏。网格看起来像这样:

public class Grid extends JPanel implements MouseListener {
public static final int GRID_SIZE = 10;

public Grid() {
setPreferredSize(new Dimension(300, 300));
setLayout(new GridLayout(GRID_SIZE, GRID_SIZE));

for (int x = 0; x < GRID_SIZE; x++)
for (int y = 0; y < GRID_SIZE; y++)
add(new Cell(x, y));
addMouseListener(this);
}

// All Mouse Listener methods are in here.

Cell 类如下所示:

public class Cell extends JPanel {

public static final int CELL_SIZE = 1;
private int xPos;
private int yPos;

public Cell (int x, int y) {
xPos = x;
yPos = y;
setOpaque(true);
setBorder(BorderFactory.createBevelBorder(CELL_SIZE));
setBackground(new Color(105, 120, 105));
setPreferredSize(new Dimension(CELL_SIZE, CELL_SIZE));
}

// Getter methods for x and y.

我的问题是我现在正尝试在 Grid 类中实现 MouseListeners。我已经意识到,虽然我可以返回网格的 X 和 Y 坐标,但我似乎无法操纵单元格本身。我假设这是因为当我在 Grid 中创建它们时,我创建了 100 个没有标识符的随机单元格,所以我无法直接访问它们。

有人可以给我建议吗?我是否需要彻底检查我的代码和我创建单元格的方式?我是不是非常愚蠢并且错过了访问它们的明显方式?谢谢

最佳答案

您可以使用适配器模式,如下所示。这样,您可以将监听器单独添加到每个网格单元格,但仍处理来自 Grid 的事件。

请注意,Grid 不再实现 MouseListener,现在由单元格处理。

public class Grid extends JPanel {
public static final int GRID_SIZE = 10;

public Grid() {
setPreferredSize(new Dimension(300, 300));
setLayout(new GridLayout(GRID_SIZE, GRID_SIZE));

for (int x = 0; x < GRID_SIZE; x++) {
for (int y = 0; y < GRID_SIZE; y++) {
final Cell cell = new Cell(x, y);
add(cell);
cell.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
click(e, cell);
}
// other mouse listener functions
});
}
}
}

public void click(MouseEvent e, Cell cell) {
// handle the event, for instance
cell.setBackground(Color.blue);
}

// handlers for the other mouse events
}

子类可以将其重写为:

public class EnemyGrid extends Grid {
public void click(MouseEvent e, Cell cell) {
cell.setBackground(Color.red);
}
}

关于java - 如何使用 MouseListener 查找网格中的特定单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192939/

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