Tôi đang cố gắng tạo một trò chơi Java với lưới 10 x 10 bao gồm các ô. Các Lưới trông liks này:Cách sử dụng MouseListener để tìm một ô cụ thể trong lưới
lớppublic 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.
The Cell trông như thế này:
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.
Vấn đề của tôi là bây giờ tôi đang cố gắng để thực hiện MouseListeners trong lớp Grid. Những gì tôi đã nhận ra là trong khi tôi có thể trả về các tọa độ X và Y của Grid, tôi dường như không thể thao túng các tế bào. Tôi giả định điều này là bởi vì khi tôi tạo chúng trong Grid, tôi đang tạo ra 100 ô ngẫu nhiên không có số nhận dạng và vì vậy tôi không có cách nào để truy cập trực tiếp chúng.
Ai đó có thể cho tôi lời khuyên về điều này không? Tôi có cần phải sửa chữa mã của tôi và cách tôi tạo ra các tế bào? Tôi đang ngu ngốc và thiếu một cách rõ ràng để truy cập chúng? Cảm ơn
Đây là một đoạn mã thực sự hữu ích - cảm ơn bạn! Tôi có thể hỏi một câu hỏi tiếp theo - tôi thực sự tạo ra hai lớp con ra khỏi Grid: OwnGrid và EnemyGrid. Cả hai ban đầu đều overrode các phương pháp MouseListener đã được chứa trong lớp Grid. Với cấu trúc mới mà bạn đã đề xuất, làm thế nào tôi có thể ghi đè lên các phương thức này trong các lớp con Lưới? –
@AndrewMartin Tôi không chắc liệu tôi có hiểu chính xác hay không, nhưng nếu bạn muốn xử lý sự kiện khác nhau trong cả hai lớp con, bạn chỉ có thể ghi đè 'mouseClicked (MouseEvent e, Cell cells)' –
'cách tôi có thể ghi đè các phương thức này các lớp con lưới không phải là công việc không dễ dàng (vì có thể không có bất kỳ vấn đề nào), bạn có thể bị mất trong hệ thống phân cấp JCOmponents, một trong những bất lợi đến từ thừa kế, [sử dụng composition thay thế] (http://www.javaworld.com/ jw-11-1998/jw-11-technical.html) – mKorbel