简体   繁体   中英

Get tooltip from JComboBox Renderer

I have a ComboBox renderer that extend JPanel and has two labels. In here i need to show tool-tip when mouse goes to iconLabel only. If mouse is in labelItem tool-tip should not show.

    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;



    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.ListCellRenderer;
    import javax.swing.plaf.metal.MetalIconFactory;

    public class MyItemRenderer extends JPanel implements ListCellRenderer
    {
      private JLabel labelItem = new JLabel();
      private JLabel iconLabel = new JLabel();

      public MyItemRenderer() {
          setLayout(new GridBagLayout());
          GridBagConstraints constraints = new GridBagConstraints();
          constraints.fill = GridBagConstraints.HORIZONTAL;
          constraints.weightx = 1.0;
          constraints.insets = new Insets(2, 2, 2, 0);

          labelItem.setOpaque(true);
          labelItem.setHorizontalAlignment(JLabel.LEFT);

          iconLabel.setOpaque(true);
          iconLabel.setHorizontalAlignment(JLabel.RIGHT);
          iconLabel.setPreferredSize(new Dimension(14, 16));
          iconLabel.setMaximumSize(new Dimension(14, 16));


          add(labelItem, constraints);

          GridBagConstraints constraints1 = new GridBagConstraints();
          constraints1.weightx = 0;
          constraints1.insets = new Insets(0, 0, 0, 2);

          add(iconLabel, constraints1);

          setBackground(Color.LIGHT_GRAY);

      }

      @Override
      public Component getListCellRendererComponent(JList list, Object value,
              int index, boolean isSelected, boolean cellHasFocus) {
          String item = (String) value;

          labelItem.setText(item);

          // set icon
          iconLabel.setIcon(MetalIconFactory.getFileChooserDetailViewIcon());

          if (isSelected) {
              labelItem.setBackground(Color.BLUE);
              labelItem.setForeground(Color.YELLOW);
              iconLabel.setBackground(Color.BLUE);
              iconLabel.setForeground(Color.YELLOW);
          } else {
              labelItem.setForeground(Color.BLACK);
              labelItem.setBackground(Color.LIGHT_GRAY);
              iconLabel.setForeground(Color.BLACK);
              iconLabel.setBackground(Color.LIGHT_GRAY);
          }

          return this;
      }
  }

My tool-tip only need come when mouse over the icon area.That mean user need to get tool-tip only they want.Please help.

Override the getToolTipText(MouseEvent event) method of the MyItemRenderer , translate the MouseEvent into the coordinate space of the iconLabel (or what ever component you want). If the MouseEvent falls within the bounds of the component, then return a different result

Something like...

    @Override
    public String getToolTipText(MouseEvent event) {
        String tooltip = super.getToolTipText(event);
        Point p = SwingUtilities.convertPoint(this, event.getPoint(), iconLabel);
        if (iconLabel.contains(p)) {
            tooltip = "I'm a banana";
        }
        return tooltip;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM