2010-07-17 12 views
3

Je veux un JLabel avec une icône à regarder "cliqué", quand la souris est cliquée sur l'étiquette. L'étiquette contient un ImageIcon. Au lieu de changer l'icône en un autre, je veux redessiner le ImageIcon avec un autre colorset (par exemple: setXORMode (new Color (255,0,0)) "à la volée" Quelqu'un at-il un indice sur la façon de gérer cela?Fondu/Redessiner/Modifier ImageIcon on click dans SWING JLabel à la volée

JLabel my_label = new JLabel(""); 
my_label.setIcon(new ImageIcon(MyClass.class.getResource("/path/to/resources/myicon.jpg"))); 
my_label.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     //HERE I NEED THE VODOO :) 
    } 
}); 
+0

L'image est-elle celle que vous lisez depuis le disque ou le réseau, par opposition à celle que vous créez à la volée? –

Répondre

2

en supposant que vous lisez l'image dans à partir du disque que vous feriez quelque chose comme ça.

URL url = getClass().getResource("images/BB.jpg"); 
BufferedImage picture = ImageIO.read(url); 

Plus tard, lorsque vous avez besoin de changer XOrMode vous le feriez procédez comme suit:

Graphics2D g = picture.createGraphics(); 
g.setXORMode(new Color(255,0,0)) 
g.dispose(); 

Si vous voulez fadein/fadeout, je vous recommande la timing framework. En outre, si vous souhaitez repeindre la partie de l'étiquette elle-même en plus de l'image dans l'étiquette, vous pouvez remplacer void paintComponent(Graphics g).

Une très bonne ressource pour laquelle vous pourriez envisager d'examiner est le livre Filthy Rich Clients. C'est plein de ce genre de choses. Si vous regardez les exemples sur le site Web du chapitre 4, il y a un exemple de code d'image qui pourrait être utile. Ce serait un très, très bon livre pour vous aussi.

+0

Merci - c'est ce à quoi je pensais. – Erik

2

J'utilise LookupOp de modifier une copie de l'icône quand il est chargé. Ensuite, utilisez setIcon() dans le gestionnaire de la souris.

+1

J'aime les deux solutions, mais je préfère l'autre. Merci pour votre réponse; +1 Votez de moi pour vous. – Erik