Ragazzi se voglio effettuare un confronto..tra un'icona ke ho su un bottone e un'altra determinata icona devo fare in questo modo??
grazie...codice:if (jButton1.getIcon()==new ImageIcon(getClass().getResource("/travel1.jpg")) )
Ragazzi se voglio effettuare un confronto..tra un'icona ke ho su un bottone e un'altra determinata icona devo fare in questo modo??
grazie...codice:if (jButton1.getIcon()==new ImageIcon(getClass().getResource("/travel1.jpg")) )
No, perché la icona in jButton1 è un oggetto chiamiamolo X mentre l'altro è un nuovo oggetto Y (istanziato con new) e quindi hanno certamente reference diversi (essendo oggetti diversi). Quindi == ritorna false.Originariamente inviato da jin85
Ragazzi se voglio effettuare un confronto..tra un'icona ke ho su un bottone e un'altra determinata icona devo fare in questo modo??
codice:if (jButton1.getIcon()==new ImageIcon(getClass().getResource("/travel1.jpg")) )
Nemmeno equals() su ImageIcon va bene. ImageIcon non fa l'override di equals()
I primi due println danno 'false'. Il secondo dà 'true'. Il motivo è che ImageIcon si basa sul Toolkit di AWT per il caricamento della immagine e c'è un sistema di "caching".codice:ImageIcon i1 = new ImageIcon("immagine.gif"); ImageIcon i2 = new ImageIcon("immagine.gif"); System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println(i1.getImage() == i2.getImage());
La documentazione di getImage() di Toolkit dice:
The underlying toolkit attempts to resolve multiple requests with the same URL to the same returned Image
Ecco perché nell'esempio sopra si hanno oggetti ImageIcon differenti ma lo stesso identico oggetto Image.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
quindi nn ho capito....cm dovrei fare ??![]()
usando questo??
codice:System.out.println(i1.getImage() == i2.getImage());
Sì, a patto che i due ImageIcon siano stati creati con lo stesso path o URL (a seconda di cosa hai usato).Originariamente inviato da jin85
quindi nn ho capito....cm dovrei fare ??![]()
usando questo??
codice:System.out.println(i1.getImage() == i2.getImage());
Per intenderci:
ImageIcon i1 = new ImageIcon("immagine.gif");
ImageIcon i2 = new ImageIcon("pippo/../immagine.gif");
Il file caricato è esattamente lo stesso, nel secondo path si va semplicemente in una sottodirectory e poi si torna sopra. Quindi la immagine è la stessa. Ma il path è differente. E questo vuol dire che nemmeno il terzo test può dare true perché si avranno Image differenti.
Quello che conta è proprio la uguaglianza di pathname o URL.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ma io avendo un'immagine sul bottone e una in memoria (nello stesso path) devo fare in questo modo :
giusto?in questo caso mi dovrebbe dare true...le due immagini, sia quella caricata sul bottone ke quella che ho in memoria si trovano nello stesso path, quindi nn dovrei avere problemi.codice:ImageIcon i1 = jButton1.getIcon(); ImageIcon i2 = new ImageIcon("immagine.gif"); i1.getImage() == i2.getImage()
correggimi se sbaglio.
cmq scusami...ora mi stavo cimentando...ma forse nn ci siamo capiti su un punto.....
io ho due Icon non ImageIcon
devo confrontare due Icon, di cui una la prendo da un bottone con getIcon(), l'altra invece ce l'ho in memoria..entrambe le icone hanno lo stesso path...
quindi vorrei sapere come confrontare due Icon .
risolto...ho fatto un cast a ImageIcon