J'ai un JButton
sur lequel j'ai défini une icône personnalisée. Maintenant, je veux qu'il affiche une autre icône en plus de celle qui est déjà affichée quand je fais glisser le curseur de la souris dessus mais je n'arrive pas à comprendre comment le faire car si j'utilise button.setIcon(icon);
cela remplacera l'icône qui est déjà affichée. Comment est-ce que je ferais ceci d'une manière aussi facile comme possible?Définition de plusieurs icônes sur JButton
Répondre
Une façon de le faire est:
Créer une icône que vous voulez voir lorsque le pointeur est plané au-dessus du bouton par un outil de retouche d'image. Et définissez cette image une fois que l'événement mousehover se produit.
p.s. utilisez n'importe quel outil d'édition de pic et vous pouvez facilement créer une image de superposition.
J'ai également vu maintenant qu'il existe un concept d'icône de survol dans la classe AbsractButton. Vous pouvez l'utiliser aussi.
Créez une deuxième version de l'icône de ce bouton qui contient la superposition. Sur la souris, passez à l'image avec la superposition.
Une autre approche pourrait être de combiner l'icône avec sa superposition à une nouvelle icône en mémoire et de le placer comme une icône sur le bouton. Cela peut être une bonne approche si vos icônes changent fréquemment. Si ce n'est pas le cas, j'utiliserais certainement la première approche.
mais alors je devrais avoir plus d'images que nécessaire –
non vous ne le feriez pas. Ici, vous n'aurez besoin que de deux images. Une avec superposition et une autre image normale que vous voulez montrer autrement. C'est ce que j'ai dit dans ma réponse ci-dessous. – LPD
@LPD oui je le ferais parce que j'ai deux 'JButton' qui ont des arrière-plans différents et je veux que la deuxième icône apparaisse lorsque je passe la souris sur les deux donc je devrais avoir 4 images au lieu de 3 –
J'ai un JButton sur lequel j'ai défini une icône personnalisée. Maintenant, je veux afficher une autre icône en plus de celle qui est déjà affichée quand je faites glisser mon curseur de la souris dessus mais je ne peux pas comprendre comment le faire parce que si j'utilise button.setIcon (icon); il remplacera l'icône déjà affichée. Comment puis-je faire cela dans un comme un moyen facile possible
- Je pense que c'est à propos
JButton.setRolloverIcon(myIcon);
DButton a mis en œuvre ces méthodes API
JButton.setIcon(myIcon);
JButton.setRolloverIcon(myIcon);
JButton.setPressedIcon(myIcon);
JButton.setDisabledIcon(myIcon);
Si vos icônes sont déjà transparents, vous pouvez facilement mettre en œuvre votre propre Icon
de combiner les deux -
public class CombineIcon implements Icon {
private Icon top;
private Icon bottom;
public CombineIcon(Icon top, Icon bottom) {
this.top = top;
this.bottom = bottom;
}
public int getIconHeight() {
return Math.max(top.getIconHeight(), bottom.getIconHeight());
}
public int getIconWidth() {
return Math.max(top.getIconWidth(), bottom.getIconWidth());
}
public void paintIcon(Component c, Graphics g, int x, int y) {
bottom.paintIcon(c, g, x, y);
top.paintIcon(c, g, x, y);
}
}
Vous utilisez setRolloverIcon(icon)
pour spécifier l'icône que vous souhaitez afficher lorsque la souris est sur le bouton.
Je trouve cela assez facile.
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
class CombinedIconButton {
public static BufferedImage getCombinedImage(BufferedImage i1, BufferedImage i2) {
if (i1.getHeight() != i2.getHeight()
|| i1.getWidth() != i2.getWidth()) {
throw new IllegalArgumentException("Images are not the same size!");
}
BufferedImage bi = new BufferedImage(
i1.getHeight(),
i1.getWidth(),
BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage(i1,0,0,null);
g.drawImage(i2,0,0,null);
g.dispose();
return bi;
}
public static void main(String[] args) throws Exception {
URL url1 = new URL("http://i.stack.imgur.com/gJmeJ.png"); // blue circle
URL url2 = new URL("http://i.stack.imgur.com/5v2TX.png"); // red triangle
final BufferedImage bi1 = ImageIO.read(url1);
final BufferedImage bi2 = ImageIO.read(url2);
final BufferedImage biC = getCombinedImage(bi1,bi2);
Runnable r = new Runnable() {
@Override
public void run() {
JPanel gui = new JPanel(new BorderLayout());
JToggleButton b = new JToggleButton();
b.setIcon(new ImageIcon(bi1));
b.setRolloverIcon(new ImageIcon(biC));
b.setSelectedIcon(new ImageIcon(bi2));
gui.add(b);
JOptionPane.showMessageDialog(null, gui);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
SwingUtilities.invokeLater(r);
}
}
Images empruntées à this answer.
- 1. Définition de plusieurs icônes de points de mappage dans JQM
- 2. Swing: Définition de l'arrière-plan de JButton
- 3. transparence Définition des icônes du design matériel
- 4. icônes ne sont pas montrés dans le JButton
- 5. comment se concentrer sur jbutton placé sur un autre jbutton?
- 6. Plusieurs icônes Affichage
- 7. Comment appeler des icônes de plusieurs icônes dans jquery?
- 8. Définition des icônes d'un nœud dans TreePanel
- 9. JButton ne fonctionne plus après plusieurs clics
- 10. Définition de plusieurs bordures sur UIView
- 11. Définition du texte JButton à aligner à gauche?
- 12. Déplacer l'icône de jbutton à jbutton
- 13. Définition de plusieurs instances sur plusieurs serveurs de Memcached
- 14. Affichage défilant de plusieurs icônes vidéo
- 15. JButton fond sur Nimbus LAF
- 16. Plusieurs icônes de bureau dans InnoSetup
- 17. Définition de plusieurs Datacontext
- 18. Comment ajouter un JButton sur mon JMenuBar?
- 19. Utilisation de Motion Listener sur JButton?
- 20. Afficher JLabel sur JButton cliquez sur
- 21. Java - L'icône/l'image est grisée sur un JButton désactivé
- 22. opérateurs Définition qui travaillent sur dataframes plusieurs
- 23. Définition du motif Flex sur plusieurs lignes
- 24. Comment mettre une image sur un JButton?
- 25. Composite, boutons et icônes
- 26. Icônes UIButton sur UIBarbutton
- 27. Je ne suis pas sûr d'ajouter des icônes à JButton dans JAVA
- 28. Android APK installe plusieurs icônes/activités?
- 29. Google maps api v3 - plusieurs marqueurs, plusieurs infowindows, 3 icônes
- 30. Intégrer plusieurs icônes dans WPF EXE
* image une fois l'événement mousehover se produit. "* Certainement *** pas *** la façon de le faire. –
J'ai réalisé différentes façons de le faire maintenant. : P Mais je ne sais pas pourquoi cela ne peut pas être fait. Pas le meilleur moyen, mais l'un des moyens .. – LPD
Vous pouvez frapper un mur vers le bas en y enfonçant la tête à plusieurs reprises. C'est *** possible, *** mais je ne le recommanderais pas. –