Accueil > Forum > > > > création d'une zone cliquable
création d'une zone cliquable
lundi 21 janvier 2008 à 22:46:32 |
création d'une zone cliquable

ldumont
|
Bonjour, je débute en java et je cherche un moyen de créer une zone cliquable sur une image. Je ne vois pas comment rendre une partie de l'image sensible au clic. Une fois qu'une zone sera définie il me suffira de faire un MouseListener sur la zone je pense mais comment définir cet emplacement.... Je dois concevoir un régulateur de vitesse. J'utilise une photo de tableau de bord et j'aimerais pouvoir cliquer sur le " + " par exemple présent sur le volant pour augmenter la vitesse du véhicule. Est ce que ce que je souhaite faire est réalisable sous Java et si oui comment? Merci d'avance
|
|
mardi 22 janvier 2008 à 09:45:43 |
Re : création d'une zone cliquable
|
mardi 22 janvier 2008 à 10:19:30 |
Re : création d'une zone cliquable

ldumont
|
oui ça aurait pu être la solution si je voulais que toute l'image soit cliquable mais je veux seulement que quelques parties de cette image le soit. Et ça veut dire quoi exactement " spy la zone " , je devine, mais en java je vois pas trop comment ça se code.
|
|
mardi 22 janvier 2008 à 10:34:15 |
Re : création d'une zone cliquable
|
mardi 22 janvier 2008 à 10:38:44 |
Re : création d'une zone cliquable

ldumont
|
tu veux dire que je superpose un petit rectangle à une parcelle de mon image? Et pour trouver la bonne position je fais comment? Je cherche à taton les coordonnées en pixel? Que de questions pour un seul message.
En tout cas merci de vos réponses si rapides!
|
|
mardi 22 janvier 2008 à 11:52:47 |
Re : création d'une zone cliquable

Twinuts
|
Salut,
heu nan pas exactement... voici un petit bout de code d'exemple illustrant l'idée :
les textes en gras explique ce que je voulais dire
import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.awt.image.Raster; import java.io.File; import java.io.IOException;
import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.JFrame;
public class Frame extends JFrame {
private static final long serialVersionUID = 4983727800375272097L;
public Frame() { setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(800, 600); setLocationRelativeTo(null); BufferedImage img = null; try { img = ImageIO.read(new File("img.png")); } catch (IOException e) { e.printStackTrace(); } setContentPane(new MyCanvas(img));
}
public static void main(String[] args) { new Frame().setVisible(true); }
private class MyCanvas extends JComponent implements MouseListener {
private static final long serialVersionUID = 8845913940083986438L; // image à dessiner private BufferedImage buff = null; // data de l'image private Raster data = null; public MyCanvas(BufferedImage img) { this.addMouseListener(this); this.buff = img; this.data = img.getData(); } public void paintComponent(Graphics g) { // dessine l'image g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this); } private void testLocation(Point mouse, String text) { // test si la souris est dans les data de l'image if(data.getBounds().contains(mouse)) System.out.println(text + " - image"); else System.out.println(text + " - !image"); }
public void mouseClicked(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, "mouseClicked"); } public void mousePressed(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, "mousePressed"); } public void mouseReleased(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, "mouseReleased"); }
public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } }
------------------------------------ "On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
OoWORAoO
|
|
mardi 22 janvier 2008 à 12:15:58 |
Re : création d'une zone cliquable

ldumont
|
ton code marche nickel; c'est exactement ce que je veux, mais le seul hic, c'est que je souhaiterai que cela ne se fasse que sur une partie de mon image, que le reste de l'image soit neutre par exemple.
Je vais essayer d'expliciter un peu : ma fenetre principale est en fait un tableau de bord, avec donc le volant, les compteurs et puis un pad sur le volant, avec une touche ' + ' et une touche ' - ' Je cherche à savoir si l'utilisateur a appuyé sur la touche ' + ' par exemple pour donner l'ordre d'augmenter la vitesse, à mon régulateur de vitesse.
Mon problème réside dans la détection de l'appui sur le ' + ' ou le ' - ' qui sont deux parties distinctes de l'image. Il faudrait que j'arrive à faire ce que tu m'as permis de faire grâce à ton code mais sur une partie restreinte de l'image. Donc je dois délimiter une zone et c'est la que je pêche.
Vraiment merci d'avoir passé du temps en tout cas, ça ma quand même fait avancer! Et puis je crois que je n'ai pas été assez claire au début. C'est incroyable de pouvoir être aidée par de parfaits inconnus et d'une façon totalement désinteressée.
|
|
mardi 22 janvier 2008 à 12:52:21 |
Re : création d'une zone cliquable

Twinuts
|
Réponse acceptée !
Salut,
bah l'entraide c'est fait pour ça ^^
pour ton problème on va concerver le code ci-dessus et le modifier un chouilla de façon à permettre de ne prendre que des zones de l'image (oui, oui c'est possible et simplement en plus ^^)
comme taleur les modification sont en gras
import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;
import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.JFrame;
public class Frame extends JFrame {
private static final long serialVersionUID = 4983727800375272097L;
public Frame() { setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(800, 600); setLocationRelativeTo(null); BufferedImage img = null; try { img = ImageIO.read(new File("img.png")); } catch (IOException e) { e.printStackTrace(); } setContentPane(new MyCanvas(img));
}
public static void main(String[] args) { new Frame().setVisible(true); }
private static class MyCanvas extends JComponent implements MouseListener {
private static final long serialVersionUID = 8845913940083986438L; // position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=0, y=0 et s'étend sur width=10 et height=10) private static final Rectangle ZONE_IMAGE_1 = new Rectangle(0, 0, 10, 10); // position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=100, y=100 et s'étend sur width=30 et height=20) private static final Rectangle ZONE_IMAGE_2 = new Rectangle(100, 100, 30, 20); // image à dessiner private BufferedImage buff = null; public MyCanvas(BufferedImage img) { this.addMouseListener(this); this.buff = img; } public void paintComponent(Graphics g) { // dessine l'image g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this); // juste histoire de voir ou se trouvent les zones (plus facil pour le test ^^) g.setColor(Color.GREEN); g.drawRect(ZONE_IMAGE_1.x, ZONE_IMAGE_1.y, ZONE_IMAGE_1.width, ZONE_IMAGE_1.height); g.drawRect(ZONE_IMAGE_2.x, ZONE_IMAGE_2.y, ZONE_IMAGE_2.width, ZONE_IMAGE_2.height); } private void testLocation(Point mouse, Rectangle area, String text) { // test si la souris est dans les data de l'image if(area.contains(mouse)) System.out.println(text + " - image"); else System.out.println(text + " - !image"); }
public void mouseClicked(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, ZONE_IMAGE_1, "mouseClicked - data 1"); testLocation(p, ZONE_IMAGE_2, "mouseClicked - data 2"); } public void mousePressed(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, ZONE_IMAGE_1, "mousePressed - data 1"); testLocation(p, ZONE_IMAGE_2, "mousePressed - data 2"); } public void mouseReleased(MouseEvent e) { //récupération de la position de la souri Point p = e.getPoint(); testLocation(p, ZONE_IMAGE_1, "mouseReleased - data 1"); testLocation(p, ZONE_IMAGE_2, "mouseReleased - data 2"); }
public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } }
PS : pour prendre une portion d'une image tu peux utiliser la méthode suivante : Toolkit tk = Toolkit.getDefaultToolkit(); // position de l'image à prendre dans l'image source Rectangle rectangle = new Rectangle(100, 100, 20, 50); // découpage d'une zones de l'image (prend juste une copie en mémoire) Image zone1 = tk.createImage(new FilteredImageSource(img.getSource(), new CropImageFilter(rectangle)));
------------------------------------ "On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
OoWORAoO
|
|
mardi 22 janvier 2008 à 13:00:55 |
Re : création d'une zone cliquable

ldumont
|
Génial! merci, je vais essayer d'adapter ça à mon image et à mon programme mais ça devrait le faire. Merci merci !!!
|
|
mardi 22 janvier 2008 à 13:04:29 |
Re : création d'une zone cliquable
|
Cette discussion est classée dans : java, image, création, zone, cliquable
Répondre à ce message
Sujets en rapport avec ce message
slection avec la souris d'une zone dans l'image avec java [ par khila ]
je besoin dans mon pfe d'implémenter implimenter une methode avec java qui me permet de selectionner une zone d'une image et afficher la matrice de pi
insérer une image zone cliquable :'( [ par marwamarwita ]
bonjour tout le monde je suis une débutante en java je voulais insérer une image dans un frame avec des zones cliquables je suis entrain d'utiliser
JMF - prise image webcam [ par MBoughaba ]
Bonjour, mon API consiste à prendre des image de ma webcam. mon api marche très bien quand cela est fait en passant par un jButton et un actionListen
Comment lire une image en java pixel par pixel [ par imfaith ]
Bonjour tout le monde ; j'ai un probléme avec la lecture des images avec java ,je veux lire une image pixel par pixel . J'ai pas trouvé le code pour
traitement d'image en java a l'aide d'un interface graphique [ par ghaouar ]
Salut, SVP aider moi je besoin d'une méthode qui permet de : - zoomer / retailler une image . - changer le niveau de gris d'une image. - rend
Applet java ne se lance pas [ par marchombre ]
Bonjour, je suis actuellement en stage et je dois créer un applet java permettant aux utilisateurs de la page web de pouvoir faire une impression écra
mouvement d'un jlabel [ par lamia88 ]
bonjours, jai crée un jlable nommé label2,et je veut modifier ca place,jai utilisée setbounds mais sa ne fonctionne pas. qulqun peut maider et merci d
chargement d'une image [ par freddy000 ]
bonsoir je suis débutant en java et j'essaye de me "former" un peu , après la consultation de quelques tutoriaux , j'arrive a taper le code suivant [c
afficher une image lors d'un clic sur Jbutton [ par sancha2010 ]
j'ai écris un programme qui a pour objectif d'afficher une image lors d'un clic sur une Boutton mais ça marche pas je ne sais pas pour quoi ?vous pouv
comment affiche un image a partie de la basse en java [ par moknihayfa ]
bonjour , je utilise un basse de maysql dans cette basse on a table produit(id_produit,couleur,categorie , description , path(qui contien chemain de
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|