Dans Swing, existe-t-il un moyen de définir le texte survolant la souris (ou le texte d'info-bulle) pour chaque élément d'une JComboBox?Java Swing: Passez votre souris sur des objets JComboBox?
Répondre
Il existe une bien meilleure façon de procéder que la réponse ToolTipComboBox
déjà donnée.
Tout d'abord, faire une coutume ListCellRenderer
:
package com.example;
import javax.swing.*;
import java.awt.*;
import java.util.List;
public class ComboboxToolTipRenderer extends DefaultListCellRenderer {
List<String> tooltips;
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JComponent comp = (JComponent) super.getListCellRendererComponent(list,
value, index, isSelected, cellHasFocus);
if (-1 < index && null != value && null != tooltips) {
list.setToolTipText(tooltips.get(index));
}
return comp;
}
public void setTooltips(List<String> tooltips) {
this.tooltips = tooltips;
}
}
utiliser ensuite comme ceci:
JComboBox comboBox = new JComboBox();
ComboboxToolTipRenderer renderer = new ComboboxToolTipRenderer();
comboBox.setRenderer(renderer);
...
//make a loop as needed
comboBox.addItem(itemString);
tooltips.add(tooltipString);
...
renderer.setTooltips(tooltips);
Je ne l'ai jamais essayé, mais vous devriez être capable de définir un ListCellRenderer, et de lui renvoyer un JLabel ou autre avec une info-bulle.
code fixe est ici peu d'une example en ligne:
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
/**
* @version 1.0 06/05/99
*/
public class ToolTipComboBox extends JFrame {
/**
*
*/
private static final long serialVersionUID = 2939624252688908292L;
String[] items = { "jw", "ja", "la" };
String[] tooltips = { "Javanese ", "Japanese ", "Latin " };
public ToolTipComboBox() {
super("ToolTip ComboBox Example");
JComboBox combo = new JComboBox(items);
combo.setRenderer(new MyComboBoxRenderer());
getContentPane().setLayout(new FlowLayout());
getContentPane().add(combo);
}
class MyComboBoxRenderer extends BasicComboBoxRenderer {
/**
*
*/
private static final long serialVersionUID = 2746090194775905713L;
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
if (-1 < index) {
list.setToolTipText(tooltips[index]);
}
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setFont(list.getFont());
setText((value == null) ? "" : value.toString());
return this;
}
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
ToolTipComboBox frame = new ToolTipComboBox();
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(200, 140);
frame.setVisible(true);
}
}
Si votre zone de liste déroulante n'est pas modifiable, utilisez setRenderer(ListCellRenderer)
. Si elle est modifiable, utilisez setEditor(ComboBoxEditor)
, parce que:
Le moteur de rendu est utilisé si le JComboBox n'est pas modifiable. S'il est modifiable, l'éditeur est utilisé pour afficher et modifier l'élément sélectionné.
J'aime la simplicité de la solution de MountainX mais pas le manque d'encapsulation. Une solution alternative qui a plus de pièces mobiles, mais elles sont assez simples et réutilisables.
Interface:
public interface ToolTipProvider {
public String getToolTip();
}
Une classe d'emballage:
public class ToolTipWrapper implements ToolTipProvider {
final Object value;
final String toolTip;
public ToolTipWrapper(Object value, String toolTip) {
this.value = value;
this.toolTip = toolTip;
}
@Override
public String getToolTip() {
return toolTip;
}
@Override
public String toString() {
return value.toString();
}
}
Et une variante du moteur de rendu de MountainX:
public class ToolTipRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JComponent component = (JComponent) super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
String tip = null;
if (value instanceof ToolTipProvider) {
ToolTipProvider ttp = (ToolTipProvider) value;
tip = ttp.getToolTip();
}
list.setToolTipText(tip);
return component;
}
}
avec l'ajout d'aujourd'hui:
combobox.addItem(new ToolTipWrapper(itemString,tooltipString));
- 1. Populating Swing JComboBox from Enum
- 2. question jCarousel - Passez la souris paramètres opacité des images
- 3. Portabilité des applications Java Swing vers OSX
- 4. Java Renderer personnalisé JComboBox et GTK
- 5. Java Swing Problème
- 6. Java - cases à cocher dans un JComboBox
- 7. Fenêtre Swing Java corrompue
- 8. java swing graphiques couleur mélange
- 9. JcomboBox n'a pas de frontière?
- 10. Positionnement en java swing
- 11. Java Swing Table taille
- 12. Java Swing JTree Expansion
- 13. GoogleEarth dans Java Swing
- 14. PropertyGrid dans Java Swing
- 15. Java - copier des objets arraylist
- 16. Flex 3: Comment modifier le curseur de la souris lorsque vous passez la souris sur une entrée de texte?
- 17. passez enum enum to method.invoke java
- 18. Comment implémenter des langages multiples dans des applications Java/Swing?
- 19. Curseur Java Swing Range U.I
- 20. Java Swing Combobox avec saisie semi-automatique et contexte Menu
- 21. Java GUI Swing Modèle Explication
- 22. Netbeans - Entrer des éléments dans un jComboBox
- 23. JComboBox getSelectedItem() ne change pas
- 24. Raccourci clavier large application - Java Swing
- 25. Ajout composant Java GUI sur événement de souris
- 26. en remplissant jComboBox dans JAVA dans Netbeans 6.5
- 27. Java Inetaddress, Swing étend et jette Exception
- 28. Contrôles d'ancrage et d'ancrage dans java Swing
- 29. Comment créer une carte d'image en utilisant Java Swing?
- 30. Swing JButton arrondi en utilisant Java