amauryxiv | Salut a tous. J'essaie d'utiliser des tooltips sur une JList. Des fois les items de ma liste sont rop long pour apparaitre completement. Je veux donc mettre un tooltip pour faire apparaitre netierement le contenu de l'item. Mais je veux aussi que le tooltip apparaisse en lieu et place de l'item (de son renderer).
La doc de l'API dit que le place d'un tooltip est clalculee avec la methode getToolTipLocation(). J'ai donc surcharge cette methode sur mes renderers (auxquels sont asocies les tooltips) pour faire apparaitre le tooltip en lieu et place du renderer.
Le probleme, c'est que contrairement a ce que dit le doc, je constate que la methode getToolTipLocation() n'est jamais appelee avant que le tooltip n'apparaisse.
Je vous donne mon code, tout bete:
Code :
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.util.Vector;
- public class ToolTipLocation extends JFrame {
- public ToolTipLocation() {
- JList list = new JList();
- Vector data = new Vector(3);
- data.add("choice 1" );
- data.add("too long need a tooltip" );
- data.add("choice 3" );
- list.setCellRenderer(new MyCellRenderer));
- list.setListData(data);
- list.setPreferredSize(new Dimension(50, 100));
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.getContentPane().setLayout(new FlowLayout());
- this.getContentPane().add(list);
- this.pack();
- this.setVisible(true);
- }
- private class MyCellRenderer extends DefaultListCellRenderer {
- public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel component = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
- component.setToolTipText(component.getText());
- return component;
- }
- public Point getToolTipLocation(MouseEvent e) {
- System.out.println("Tooltip located" );
- return new Point(0, 0);
- }
- }
- public static void main(String[] args) {
- new ToolTipLocation();
- }
- }
|
Essayez le et dites moi ce que vous en pensez. Merci d'avance. ---------------
Amaury.
|