IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Bulles sur une Image Icon


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 64
    Points : 36
    Points
    36
    Par défaut Bulles sur une Image Icon
    Bonsoir, je vous explique mon problème. Alors voilà, je stock mes images dans des arraylists de cette façon la dans mon panel que je dessine:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static ArrayList<Vache> Vaches;
    Dans la classe Vache je récupère l Image Icon de cette facon là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Vache(int abscisse, int ordonnee){
    		this.x = abscisse;
    		this.y = ordonnee;
     
    		ImageIcon imageVache = new ImageIcon("images/vache.png");
    		Vache = imageVache.getImage();
    Seulement j'aimerais que quand je passe la souris dessus une bulle apparaît avec du texte sur cette image. Je sais qu'il faut utiliser setToolTipText, mais je ne vois pas trop comment l'utilisé. J ai essayé de cette facon la mais rien..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Vache(int abscisse, int ordonnee){
    		this.x = abscisse;
    		this.y = ordonnee;
     
    		ImageIcon imageVache = new ImageIcon("images/vache.png");
    		Vache = imageVache.getImage();
    		JPanel panel = new JPanel();
    		JLabel label = new JLabel();
    		label.setToolTipText("Bonjour");
    		label.setIcon(imageVache);
    		panel.add(label);

    Merci de votre compréhension

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est bien comme ça qu'on affecte une infobulle à un JLabel. Que signifie "là mais rien" ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    Je ne vois pas de bulle..

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Euh, serait-ce que tu n'attends pas assez longtemps ? Un tooltip ne s'affiche jamais immédiatement par défaut. Tu peux modifier le délai avant afficher par le ToolTipManager.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    D accord merci je vais regarder sa et vous tiens en courant. Je voudrais vous posé une autre question comment fait t - on pour que lorsque je déplace une image au clavier vers cette image à bulle ,la bulle apparaît ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On ne peut pas forcer l'afficher du tooltip par défaut d'un JLabel. On peut faire son propre tooltip, avec la classe JToolTip, et gérer son affichage à partir du gestionnaire d'évènement clavier.

    Mais pour avoir le comportement exact d'un tooltip, c'est assez complexe (il faut gérer son position, le moment il s'affiche, il se cache, etc... On peut simplifier certes, en fonction de ce qu'on cherche à faire fonctionnellement. Peut-être y-a-il une autre manière de résoudre ce que tu cherches à faire. Bien plus simple. Surtout que quand j'entends parler d'image qui se déplace, j'ai envie de dire de ne plus chercher à faire ça avec des composants SWING, mais en dessinant directement dans un contexte graphique, et là tu peux faire tout ce que tu veux.

    Quoiqu'il en soit, si ça t'intéresse voilà une version simplifiée d'un contrôle de tooltip sur le clavier (simplifiée parce qu'on gère pas tout ce qu'on devrait gérer, et qu'il y a des défauts, en particulier quand le tooltip sort de la JFrame - ça clignote). Tu verras que c'est déjà un peu compliqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    public class DemoTooltip {
     
    	private static final String IMAGE_PATH = "suricate.png";
    	private static final String TOOLTIP_TEXT = "tooltip";
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Demo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel((LayoutManager) null, true);
    		panel.setBackground(Color.WHITE);
    		frame.getContentPane().add(panel);
     
    		JLabel label = create();
     
    		JToolTip toolTip = label.createToolTip();
    		toolTip.setTipText(label.getToolTipText());
     
    		panel.add(label);
     
    		KeyboardFocusManager manager = KeyboardFocusManager
    				.getCurrentKeyboardFocusManager();
    		manager.addKeyEventDispatcher(new KeyEventDispatcher() {
     
    			private Timer timer;
    			private Popup popup;
     
    			public boolean dispatchKeyEvent(KeyEvent e) {
    				switch (e.getKeyCode()) {
    				case KeyEvent.VK_UP:
    					move(0, -1);
    					break;
    				case KeyEvent.VK_DOWN:
    					move(0, 1);
    					break;
    				case KeyEvent.VK_RIGHT:
    					move(1, 0);
    					break;
    				case KeyEvent.VK_LEFT:
    					move(-1, 0);
    					break;
    				}
    				return false;
    			}
     
    			private void move(int dx, int dy) {
    				ToolTipManager.sharedInstance().unregisterComponent(label);
    				Point location = label.getLocation();
    				location.x += dx;
    				location.y += dy;
     
    				int x = label.getLocationOnScreen().x + label.getWidth();
    				int y = label.getLocationOnScreen().y + label.getHeight()+label.getHeight()/2;
     
    				Rectangle screenBounds = label.getGraphicsConfiguration().getBounds();
     
    				if ( x+toolTip.getWidth()>screenBounds.getMaxX() ) {
    					x=(int)screenBounds.getMaxX()-toolTip.getWidth();
    				}
    				if ( x<screenBounds.getMinX() ) {
    					x=(int)screenBounds.getMinX();
    				}
     
    				if ( y+toolTip.getHeight()>screenBounds.getMaxY() ) {
    					y=(int)screenBounds.getMaxY()-toolTip.getHeight();
    				}
    				if ( y<screenBounds.getMinY() ) {
    					y=(int)screenBounds.getMinY();
    				}
     
    				if ( popup!=null ) {
    					popup.hide();
    				}
     
    				label.setLocation(location);
    				popup = PopupFactory.getSharedInstance().getPopup(label,
    						toolTip, x,
    						y);
    				popup.show();
     
    				if ( timer!=null ) {
    					timer.stop();
    				}
    				timer = new Timer(ToolTipManager.sharedInstance().getDismissDelay(),
    						(e) -> { 
    							popup.hide();
    							popup=null;
    							ToolTipManager.sharedInstance().registerComponent(label);
    						});
    				timer.start();
     
    			}
     
    		});
     
    		frame.setSize(200, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static JLabel create() {
    		JLabel label = new JLabel();
    		ImageIcon icon = new ImageIcon(IMAGE_PATH);
    		if ( icon.getIconWidth()==0 || icon.getIconHeight()==0 ) throw new IllegalStateException("Image not found or zero size");
    		label.setIcon(icon);
    		label.setToolTipText(TOOLTIP_TEXT);
    		label.setSize(icon.getIconWidth(), icon.getIconHeight());
    		return label;
    	}
     
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    Je ne peux pas faire un système de collision dans lequel je vais pouvoir seulement affiché la bulle lorsque je rentre en collision avec cette image et l'enlevé quand je ne suis plus en collision?

    PS man bulle ne s'affiche toujours pas...

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si, par JToolTip, à gérer toi-même, pas par setToolTipText. Mais si c'est juste pour afficher des images, et les déplacer, autant utiliser un Canvas (ou un JPanel) et dessiner des images dedans, plutôt que d'utiliser des JLabel qui sont des composants lourds qui embarquent plein de choses qui ne sont pas nécessaires pour afficher et déplacer 2 images, et peuvent même être gênantes parfois.

Discussions similaires

  1. Bulle BD sur une image, comment faire ?
    Par isa150183 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/02/2015, 12h31
  2. Déplacer des icones sur une image
    Par link66 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/12/2010, 12h44
  3. lien alt sur une image ou info bulle
    Par nonodup2 dans le forum Flex
    Réponses: 1
    Dernier message: 28/09/2008, 18h03
  4. Afficher une bulle au passage de la souris sur une image
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/05/2008, 15h04
  5. info bulle sur une image
    Par Mobistar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2008, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo