Ciao a tutti,
io dovrei fare in modo che il programma esegua una routine al click del mouse sopra ad un'immagine. Ho visto che il metodo AddMouseListener non è implementato dall'oggetto Image. Come posso fare?
Ciao a tutti,
io dovrei fare in modo che il programma esegua una routine al click del mouse sopra ad un'immagine. Ho visto che il metodo AddMouseListener non è implementato dall'oggetto Image. Come posso fare?
No, perché Image non è un "componente" grafico!! È solo un oggetto che rappresenta e modella una immagine.Originariamente inviato da bubaboss
io dovrei fare in modo che il programma esegua una routine al click del mouse sopra ad un'immagine. Ho visto che il metodo AddMouseListener non è implementato dall'oggetto Image. Come posso fare?
Bisogna vedere dove questa immagine è disegnata. Messa in un ImageIcon visualizzato da un JLabel? O un JButton? O disegnata direttamente sul Graphics di un (tuo) componente?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Scusa se ho interrotto la discussione così bruscamente ma ultimamente ho avuto qualche problema tecnico. L'immagine è disegnata direttamente sul Graphics di un componente (nel mio caso un JPanel)
Allora è sul componente, il tuo pannello, che puoi registrare i listener.Originariamente inviato da bubaboss
L'immagine è disegnata direttamente sul Graphics di un componente (nel mio caso un JPanel)
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
In pratica dovrei fare all'interno del pannello sul quale sono disegnate le immagini
Giusto??codice:this.AddMouseListener()
Ma poi come faccio a recuperare il riferimento all'immagine se ne ho piu' di una?????
Si, a parte la iniziale che è addMouseListener( .... )Originariamente inviato da bubaboss
In pratica dovrei fare all'interno del pannello sul quale sono disegnate le immagini
Giusto??codice:this.AddMouseListener()
Se nel componente, nel paintComponent(), disegni più immagini ok ma devi comunque fare tu tutta questa gestione. Ovvero tenerti da qualche parte delle meta-informazioni sulle immagini, a che posizione le disegni e con quale dimensione.Originariamente inviato da bubaboss
Ma poi come faccio a recuperare il riferimento all'immagine se ne ho piu' di una?????
Insomma, è tutto a tuo carico. Ma si può fare benissimo. La questione è solo vedere quali/quante immagini hai, se sono un numero fisso o ad esempio arbitrario (es. scelte e aggiunte dall'utente, quante ne vuole). E si tratta alla fin fine di creare la struttura dati più adatta per mantenere immagini e informazioni.
Quindi con il "point" del mouse diventa perfettamente possibile andare a cercare in quale immagine "cade" il punto.
Ma ripeto, tutto questo è a tuo carico, non c'è nulla di predefinito nel framework.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ok...grazie mille per il supporto
Mi sembrava di aver capito invece non è così....
Per disegnare l'immagine io la recupero attraverso un Toolkit e poi la salvo in un MediaTracker. In questo modo:
Premetto che il numero di immagini e' fisso.codice:import javax.swing.*; import java.awt.*; import java.util.*; public class ImagePanel extends JPanel { private Image im1; private Image[] d; private int n1,n2,n3,n4,n5,height,width; private Graphics f; public ImagePanel(int n1, int n2, int n3, int n4, int n5) { //aggiungo immagine Toolkit t= Toolkit.getDefaultToolkit(); im1 = t.getImage("PROVA.jpg"); d = new Image[6]; d[0] = t.getImage("PROVA1.png"); d[1] = t.getImage("PROVA2.png"); d[2] = t.getImage("PROVA3.png"); d[3] = t.getImage("PROVA4.png"); d[4] = t.getImage("PROVA5.png"); d[5] = t.getImage("PROVA6.png"); MediaTracker m1= new MediaTracker(this); m1.addImage(im1, 1); m1.addImage(d[0], 2); m1.addImage(d[1], 3); m1.addImage(d[2], 4); m1.addImage(d[3], 5); m1.addImage(d[4], 6); m1.addImage(d[5], 7); try { m1.waitForAll(); } catch (InterruptedException e) { } width=756; height=817; } public void paintComponent (Graphics g) { super.paintComponent(g); int x,y; x=120; y=350; g.drawImage(im1, 0, 0,width,height,null); g.drawImage(d[n1], x, y,null); g.drawImage(d[n2], 2*x, y,null); g.drawImage(d[n3], 3*x, y,null); g.drawImage(d[n4], 4*x, y,null); g.drawImage(d[n5], 5*x, y,null); } }
Io avevo pensato di fare una cosa del genere ma il riferimento alle immagini e' contenuto nel MediaTracker????
Se non e' nel MediaTracker da dove lo tiro fuori???codice:this.addMouseListener(m1);
Il MediaTracker ti serve solo per attendere il completamento del caricamento e basta. Dopo il waitForAll non ti servirebbe più e infatti terminato il costruttore non lo referenzi più e va al g.c. da solo.Originariamente inviato da bubaboss
Io avevo pensato di fare una cosa del genere ma il riferimento alle immagini e' contenuto nel MediaTracker????
Le posizioni le hai fissate tu in modo "cablato" nel sorgente. Quindi le sai. Le dimensioni le hai comunque dalle immagini.
Pertanto non vedo problemi a cercare in quale "rettangolo" delle varie immagini "cade" un punto.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet