Del Swing, hay una manera de definir el ratón encima del texto (o la punta de la herramienta de texto) para cada elemento en un Jtree?

InformationsquelleAutor David Koelle | 2009-01-26

5 Comentarios

  1. 21

    Hay una forma mucho mejor para hacer esto que el ToolTipComboBox respuesta ya está dada.

    Primero, haga una costumbre 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;
        }
    }

    A continuación, utilizarlo como este:

    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);
    • Curiosamente, este no me funciona :/
    • Cómo configurar la ubicación de la descripción? Una descripción de una lista no tiene mucho sentido si flota en algún lugar debajo del cursor, como información sobre herramientas. La descripción debe aparecer en la misma ubicación y como elemento de la lista. Alguna idea de cómo conseguir esto?
  2. 7

    Me gusta la simplicidad de MountainX la solución, pero no la falta de la encapsulación. Una solución alternativa que tiene más partes móviles, pero son muy simples y reutilizables.

    Una interfaz:

    public interface ToolTipProvider {
        public String getToolTip();
    }

    Una clase contenedora:

    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();
        }
    
    }

    Y una variante de MountainX del procesador:

    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;
        }
    }

    con la adición de ahora:

    combobox.addItem(new ToolTipWrapper(itemString,tooltipString) );
  3. 3

    Aquí hay poco de código fijo, desde una línea de ejemplo:

    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);
    }
    }
    • Cómo configurar la ubicación de la descripción? Una descripción de una lista no tiene mucho sentido si flota en algún lugar debajo del cursor, como información sobre herramientas. La descripción debe aparecer en la misma ubicación y como elemento de la lista. Alguna idea de cómo conseguir esto?
  4. 0

    Yo nunca lo he probado, pero debe ser capaz de definir una ListCellRenderer, y tiene que devolver un JLabel o lo que sea con una punta de la herramienta.

Dejar respuesta

Please enter your comment!
Please enter your name here