Mappa cliccabile

di il
3 risposte

Mappa cliccabile

Salve ragazzi come da titolo sto cercando di realizzare una mappa interattiva.

Io ho questa immagine




e praticamente vorrei aggiungere un ActionEvent ogni qual volta clicco sulla capitale di una nazione...

Ho già implementato una piccola funzione la quale mi ritorna le coordinate del mouse sulla mappa...ora vorrei fare in modo che in seguito al click sulla capitale (coordinate x coordinate y) mi aggiunga un evento.

Consigli?

Grazie

Cià wuajù

3 Risposte

  • Re: Mappa cliccabile

    Javier ha scritto:


    ora vorrei fare in modo che in seguito al click sulla capitale (coordinate x coordinate y) mi aggiunga un evento.

    Consigli?
    Innanzitutto la immagine della mappa sarebbe meglio disegnarla tramite custom-painting estendendo es. JPanel. È ovviamente possibile mettere la mappa come Icon in un es. JLabel ma se estendi JPanel e disegni sul Graphics hai 2 vantaggi: innanzitutto puoi controllare precisamente la posizione di origine della immagine nel componente e poi avendo fatto una classe apposita, puoi incapsulare lì dentro tutta la logica di gestione (questo ha a che fare con il design delle classi ... non con l'aspetto grafico).

    Visto che le aree "calde" sono solo i punti delle capitali, sarebbe ovviamente sensato prevedere che il punto sia valido entro un certo raggio di pochi pixel .... si riesce difficilmente a cliccare un pixel preciso!
    Quindi ti basta fare in modo che il tuo componente-mappa possa ricevere una associazione tra punti (x/y) e magari una tua interface che permette di notificare l'evento.

    Se vuoi arrivare a definire un "listener" custom come quelli di Swing, ci sono un po' di cose da sapere e replicare ma sarebbe possibile.

    Si potrebbe addirittura pensare di permettere una cosa del tipo:

    imageMapComponent.addMapPointListener(12, 34, new MapPointListener() { ..... });

    dove MapPointListener è una tua interfaccia di "listener".

    E giusto come nota finale: nei framework AWT e Swing non esiste nulla per gestire mappe "cliccabili". O fai a mano o con l'uso di librerie esterne già fatte (non ne conosco).
  • Re: Mappa cliccabile

    Ciao andbin e grazie davvero per la risposta dettagliata.

    Ho implementato l'immagine come sfondo in un JLabel e riesco a ricavare i punti precisi delle capitali tramite l'apposita funzione
    while(true){
    //Thread.sleep(100);
    System.out.println("("+MouseInfo.getPointerInfo().getLocation().x+", "+MouseInfo.getPointerInfo().getLocation().y+")");
    }
    giustamente questo è un file di appoggio dove vado a vedere i punti esatti e li implemento nel file originale.

    Dato che comunque sono un bel pò di punti da memorizzare per risparmiare memoria posso fare che disegno di nero i punti relativi al mio interesse e successivamente :

    _ se il mouse si ferma per 2/3 secondi sul punto compare tipo una finestra che raffigura informazioni a tabella relative alla capitale

    _se invece ci clicco sopra mi apre un'altra tabella con altri eventi.

    Ora la mia domanda è questa : il puntatore del mouse non riconosce i colori automaticamente giusto? C'è un modo per farlo?
  • Re: Mappa cliccabile

    Javier ha scritto:


    while(true){
    //Thread.sleep(100);
    System.out.println("("+MouseInfo.getPointerInfo().getLocation().x+", "+MouseInfo.getPointerInfo().getLocation().y+")");
    }
    A cosa ti serve questo?
    Hai usato MouseListener? È questo che serve!

    Javier ha scritto:


    giustamente questo è un file di appoggio dove vado a vedere i punti esatti e li implemento nel file originale.
    Se vuoi rendere evidenti graficamente i punti in qualche modo, ok. Puoi farlo tanto in modo "statico" (disegni i punti tu nella immagine con un programma di grafica), quanto in modo "dinamico" (a runtime hai una collezione di punti e li disegni sulla immagine prima di visualizzarla o anche disegnarli "al volo" sopra la immagine (se usassi il custom painting).
    Ma questo è solo per l'utente finale ... non cambia nulla nella logica di gestione.

    Javier ha scritto:


    Ora la mia domanda è questa : il puntatore del mouse non riconosce i colori automaticamente giusto? C'è un modo per farlo?
    Il mouse non ha nulla a che fare con i colori sullo schermo! Il mouse ti fornisce una posizione x/y (e con MouseListener hai anche le coordinate relative al componente! non solo quelle relative allo schermo intero).
    Spetta a te usare queste coordinate per dedurre dove "cade" il punto in aree di tuo interesse.
Devi accedere o registrarti per scrivere nel forum
3 risposte