0 votos

Buenas, nos han mandado como ejercicio con una ponderación importante de clase, el juego de la guerra naval realizado mediante Java.

En un principio, he realizado una clase Tablón(extends JPanel) donde el tablón se crea mediante un array bidimensional de casillas de la clase Casilla. Mi problema comienza cuando trato de hacer que una casilla por si misma sea capaz de reaccionar a un click del usuario. Y no tengo ni idea de por donde cogerlo. 

Dejo orientación de como he definido mi clase casilla y mi clase tablón por si sirve de ayuda...

public Tablon() {
        this.setBackground(Color.yellow);
        t = new Casilla[Dimension][Dimension];
        int y = 1;
        for (int i = 0; i < Dimension; i++) {
            int x = 1;
            for (int j = 0; j < Dimension; j++) {
                Rectangle2D.Float r = new Rectangle2D.Float(x, y, Lado, Lado);

                Casilla cas = new Casilla(r, Gris);
                t[i][j] = cas;
                cas.addMouseListener(this);
                x += Lado + 1;
            }
            y += Lado + 1;
        }
    }
    
    @Override
    public void paintComponent(Graphics g) {
        for (int i = 0; i < Dimension; i++) {
            for (int j = 0; j < Dimension; j++) {
                t[i][j].paintComponent(g);
            }
        }
    }
public class Casilla extends JPanel implements MouseListener {

    private Rectangle2D.Float rec;
    private Color col;
    private Boolean ocupada;
    private Ficha ficha;

    @SuppressWarnings("LeakingThisInConstructor")
    public Casilla(Rectangle2D.Float r, Color c) {
        this.rec = r;
        this.col = c;
        this.ocupada = false;
        this.ficha = null;
        this.addMouseListener(this);
    }

    
    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(this.col);
        g2d.fill(this.rec);
        if (this.ocupada) {
            this.ficha.paintComponent(g, this.rec.x, this.rec.y);
        }
        
    }

Gracias de antemano a cualquiera que le eche un vistazo, un saludo!

por en Java

1 Respuesta

+1 voto

Sólo te falta utilizar el método correspondiente para detectar la pulsación. Para lo que necesitas te bastará con implementar:

@Override
public void mousePressed(MouseEvent e) {
       //Me han pulsado
}

Tienes más información y ejemplos en: https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

por