Vous pouvez remplacer la méthode getToolTipText(...)
pour fournir votre info-bulle personnalisée.
Par exemple:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ListToolTip extends JFrame
{
public ListToolTip()
{
DefaultListModel model = new DefaultListModel();
model.addElement("one");
model.addElement("two");
model.addElement("three");
model.addElement("four");
model.addElement("five");
model.addElement("six");
model.addElement("seven");
model.addElement("eight");
model.addElement("nine");
model.addElement("ten");
JList list = new JList(model)
{
public String getToolTipText(MouseEvent e)
{
int row = locationToIndex(e.getPoint());
Object o = getModel().getElementAt(row);
return o.toString();
}
public Point getToolTipLocation(MouseEvent e)
{
int row = locationToIndex(e.getPoint());
Rectangle r = getCellBounds(row, row);
return new Point(r.width, r.y);
}
};
JScrollPane scrollPane = new JScrollPane(list);
getContentPane().add(scrollPane);
}
public static void main(String[] args)
{
ListToolTip frame = new ListToolTip();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(400, 100);
frame.setVisible(true);
}
}
Redéfinition getToolTipLocation(...)
n'est pas nécessaire.
Edit:
Je veux enregistrer le texte personnalisé dans le modèle
Ensuite, vous devrez enregistrer un objet personnalisé dans le modèle qui contient la valeur affichée dans la liste et la texte pour l'info-bulle.
Découvrez ComboBox With Hidden Data pour un exemple de création d'un objet en utilisant cette approche.
Les info-bulles dans JList sont définies par l'info-bulle de la cellule 'ListCellRenderer' –