Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    sacchiera con JPanel disposti con gridlayout

    Ciao, sto implementando un gioco in java e ho dei problemi con la scacchiera.
    Per reare la scacchiera ho creato tanti jpanel, uno per ogni cella della scacchiera, e li ho disposti a scacchiera con il grid layout.
    A ogni panel e quindi a ogni cella della scacchiera ho associato un mouselistener, quando si clicca su una cella questa cambia colore.

    Il mio problema e che non so come risalire alla posizione del JPanel nella scacchiera
    (per es. A2 ) che ha scatenato l'evento quando ci si clicca sopra con il mouse.

    qualcuno ha qualche idea su come fare????

    grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: sacchiera con JPanel disposti con gridlayout

    Originariamente inviato da kappak_79
    Per reare la scacchiera ho creato tanti jpanel, uno per ogni cella della scacchiera, e li ho disposti a scacchiera con il grid layout.
    A ogni panel e quindi a ogni cella della scacchiera ho associato un mouselistener, quando si clicca su una cella questa cambia colore.

    Il mio problema e che non so come risalire alla posizione del JPanel nella scacchiera
    (per es. A2 ) che ha scatenato l'evento quando ci si clicca sopra con il mouse.
    Dovresti specificare un po' meglio come è il "design" delle tue classi. Innanzitutto nelle celle del GridLayout hai messo proprio un JPanel o una TuaClasse che estende JPanel? La informazione sulla posizione del pannello nella scacchiera dove ti serve?

    Senza vedere il codice che hai scritto è un po' difficile aiutarti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho usato un JPanel puro.
    Quando si clicca sopra sul JPanel e quindi su una cella della scacchiera si attiva l'evento mousePressed associato a quel JPanel....qui cambio il colore della cella e dovrei far muovere il pezzo...pero nn so quale JPanel e stato cliccato.
    Con MouseEvent.getComponent() risalgo al JPanel in questione e quindi posso cambiare il colore etc..., pero non so come risalire alla posizione del JPanel nella scacchiera

    questo e un pezzo dlla funzione che disegna la scacchiera.

    public void DisegnaScacchieraPanel()
    { ScacchieraPanel=new JPanel();
    ....
    ....
    CellaPanel=new JPanel[10][10];
    label=new JLabel[10][10];
    ....
    ....
    label[i][j].setIcon(image); //carico l'immagine di unpezzo
    CellaPanel[i][j].addMouseListener(this);
    CellaPanel[i][j].add(label[i][j]);
    c.gridx=j;
    c.gridy=i;
    ScacchieraPanel.add(CellaPanel[i][j],c);
    ....
    ....
    }

    qui e dove dovrei risalire alla pozizione del JPanel nella scacchiera,cioe nel listener associato

    public void mousePressed(MouseEvent me)
    {
    ....
    ....
    //con me.getComponent() ho un riferimento l Jpanel clikkato...pero nn so la sua posizione nella scacchiera
    me.getComponent()

    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da kappak_79
    Ho usato un JPanel puro.
    Innanzitutto vedo che ogni cella JPanel contiene un JLabel. Per quale motivo? Non potresti mettere nelle celle direttamente un JLabel??
    Non so cosa vuoi fare di preciso (ovviamente) ma se non ci sono motivi particolari non vedo perché mettere un JPanel!

    Comunque in questi casi la soluzione più semplice è la estensione. Indipendentemente da cosa vuoi estendere, se JPanel o JLabel, la TuaClasse può definire 2 proprietà 'riga' e 'colonna' (o chiamale come vuoi), passate al costruttore, assegnate a variabili di istanza e poi leggibili con i soliti metodi getter.
    Nel mousePressed() tu sai che il "sorgente" dell'evento è un oggetto della tua classe. Fai il cast e quindi puoi sapere banalmente quelle informazioni.

    Originariamente inviato da kappak_79
    Con MouseEvent.getComponent()
    getComponent() è ok ma è più specifico ... in generale c'è getSource(). Ma nel tuo caso va bene il primo.

    Originariamente inviato da kappak_79
    c.gridx=j;
    c.gridy=i;
    Stai usando GridBagLayout ... non GridLayout come avevo pensato all'inizio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.