Próbuję stworzyć grę Java z siatką 10 x 10 składającą się z komórek. Siatka wygląda to liks:Jak używać MouseListener do znalezienia konkretnej komórki w siatce
klasapublic 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.
Cela wygląda następująco:
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.
Mój problem jest to, że jestem teraz próbuje wdrożyć MouseListeners w klasie sieci. Zdałem sobie sprawę, że chociaż mogę zwrócić współrzędne X i Y siatki, nie mogę manipulować komórkami. Zakładam, że dzieje się tak dlatego, że gdy tworzyłem je w Grid, tworzę 100 losowych komórek bez identyfikatorów, więc nie mam możliwości bezpośredniego dostępu do nich.
Czy ktoś może mi doradzić w tej sprawie? Czy muszę dokonać przeglądu mojego kodu i sposobu, w jaki tworzę komórki? Czy jestem okropnie głupia i brakuje im oczywistego sposobu na dostęp do nich? Dzięki
To naprawdę przydatny fragment kodu - dziękuję! Czy mogę zadać pytanie uzupełniające - faktycznie tworzę dwie podklasy z Grid: OwnGrid i EnemyGrid. Oboje początkowo przesłonili metody MouseListener, które były zawarte w klasie Grid. Z nową zaproponowaną strukturą, w jaki sposób mogę zastąpić te metody w podklasach Grid? –
@AndrewMartin Nie jestem pewien, czy rozumiem, że poprawnie, ale jeśli chcesz obsługiwać zdarzenia różnie w obu podklasach, możesz po prostu zastąpić "mouseClicked (MouseEvent e, Cell cell)" –
"jak mogę zastąpić te metody w podklasy Grid "nie jest to łatwa praca (ponieważ jest to możliwe bez żadnego problemu), możesz stracić w JCOmponents hierarchii, jedną z wad jest dziedziczenie, [użyj kompozycji zamiast] (http://www.javaworld.com/ jw-11-1998/jw-11-techniques.html) – mKorbel