View Full Version : [JAVA]Applet immagine interattiva
dragonhunter89
15-02-2012, 20:28
Avrei bisogno di "sviluppare" una immagine "interattiva" in java, tramite un applet.
Praticamente dovrei caricare su di una semplice pagina web un immagine, per esempio una planimetri di una stanza, e passando sopra a specifici oggetti/punti visualizzare un popup con delle informazioni. Inoltre avrei bisogno che questi punti siano personalizzabili in fase di esecuzione e non scelti a priori.
Con java e html/css me la cavo abbastanza, solo che qui non saprei da dove iniziare. Ho provato a cercare qualcosa con google, ma non sapendo cosa cercare precisamente non ho trovato nulla.
Gli unici due esempi che ho trovato che potrebbero essermi utili sono:
https://sites.google.com/site/drjohnbmatthews/graphpanel
http://www.valcon.it/p/JavaAppletImmagineM2#hn_Applet_Immagine_interattiva_2
Qualcuno sa aiutarmi?
Esattamente cosa non ti torna? Lo chiedo perchè per l'applet (JApplet) basta praticamente pigiare il pulsante in Netbeans e te ne crea una bell'è pronta da riempire ed è praticamente un JPanel con qualche metodo per parlare col browser.
Per l'immagine la questione è aritmetica: pigli l'immagine, la ficchi in una JLabel (ImageIcon) e poi devi andare a interpretarel'input utente (MouseListener) secondo le ragioni del tuo programma.
dragonhunter89
16-02-2012, 13:37
Esattamente cosa non ti torna? Lo chiedo perchè per l'applet (JApplet) basta praticamente pigiare il pulsante in Netbeans e te ne crea una bell'è pronta da riempire ed è praticamente un JPanel con qualche metodo per parlare col browser.
Per l'immagine la questione è aritmetica: pigli l'immagine, la ficchi in una JLabel (ImageIcon) e poi devi andare a interpretarel'input utente (MouseListener) secondo le ragioni del tuo programma.
Il problema non è cosa non mi torna, ma che non so proprio come fare. Per rendere meglio l'idea di cosa voglio fare, ecco un esempio
http://www.ikea.com/us/en/catalog/categories/departments/living_room/tools/livingroom_rooms_ideas/#/20121_lirs03a_01
Qui è realizzato in flash, ed ha anche un sacco di effetti che non mi servono. E possibile fare una cosa un pò più semplice in java?
PS: Utilizzo eclipse al momento.
Corso applet super-breve.
Questa è un'applet che non fa nulla:
package test;
import javax.swing.*;
public class ImageApplet extends JApplet {
}
Compilata e impacchettata in un jar di nome ImageApplet.jar può essere mostrata nella pagina:
<html>
<body>
<applet code="test.ImageApplet" archive="ImageApplet.jar" width="600" height="600">
</applet>
</body>
</html>
Sarebbe meglio usare un descrittore jnlp ma funziona anche così.
In quella pagina ImageApplet è il rettangolo di 600x600 pixel. Dentro l'applet ci metti quello che preferisci: è come un JFrame solo che il ciclo vitale è passivo.
Ci ficchiamo dentro un'immagine. Puoi farlo direttamente con l'estensione di JApplet ma siccome oggi ci disegni un'immagine, domani devi aggiungere omnia mundi et quibusdam aliis, il disegno dell'immagine lo fai fare ad un componente separato che poi infili nell'applet:
package test;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class ImageDisplay extends JPanel {
private BufferedImage currentImage = null;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(currentImage != null) doPaintImage((Graphics2D) g, currentImage);
}
public void setCurrentImage(BufferedImage image) {
this.currentImage = image;
repaint();
}
public void doPaintImage(Graphics2D g, BufferedImage image) {
g.drawImage(image, 0, 0, null);
}
}
package test;
import java.awt.*;
import javax.swing.*;
public class ImageApplet extends JApplet {
private ImageDisplay imageDisplay;
public void start() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
setupUi();
}
});
}
public void setupUi() {
imageDisplay = new ImageDisplay();
add(imageDisplay);
repaint();
}
}
Per caricare un'immagine in ImageDisplay possiamo dire:
package test;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class ImageDisplay extends JPanel {
private BufferedImage currentImage = null;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(currentImage != null) doPaintImage((Graphics2D) g, currentImage);
}
public void loadImage(java.net.URL url) {
try {
BufferedImage image = javax.imageio.ImageIO.read(url);
setCurrentImage(image);
} catch(Exception ex) {
ex.printStackTrace();
}
}
public void setCurrentImage(BufferedImage image) {
this.currentImage = image;
repaint();
}
public void doPaintImage(Graphics2D g, BufferedImage image) {
g.drawImage(image, 0, 0, null);
}
}
Per sapere da dove caricare l'immagine bisogna vedere come pensi di fare. Se usi un parametro del tag applet nella pagina html puoi dire:
<html>
<body>
<applet code="test.ImageApplet" archive="ImageApplet.jar" width="600" height="600">
<param name="default_image" value="image.png"></param>
</applet>
</body>
</html>
Nell'applet peschi il parametro e lo usi come percorso relativo dell'ipotetico file:
package test;
import java.awt.*;
import javax.swing.*;
public class ImageApplet extends JApplet {
private ImageDisplay imageDisplay;
public void start() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
setupUi();
}
});
}
public void setupUi() {
imageDisplay = new ImageDisplay();
add(imageDisplay);
repaint();
String file = getParameter("default_image");
java.net.URL url = ImageApplet.class.getResource("/" + file);
imageDisplay.loadImage(url);
}
}
Qui poi devi vedere tu da dove arrivano i file ma considera che un'applet non firmata carica solo dal server su cui risiede.
Dopodichè devi disegnare i punti. E qui ti servono le iconcine dei punti e le posizioni. Le posizioni puoi passarle come parametri o farle creare all'utente e poi salvarle da qualche parte.
Noti i punti le disegni sull'immagine nel doPaintImage di ImageDisplay. Il comando:
g.drawImage(image, 0, 0, null);
è formalmente:
g.drawImage(un java.awt.image, posizione x, posizione y, trasformazione);
E via così.
dragonhunter89
16-02-2012, 23:32
...
Ottimo. Nei prossimi giorni vedo di fare dei test.
Grazie ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.