在DafaultListModel中带有工具提示文本的JList

时间:2017-05-24 14:19:19

标签: java swing tooltip jlist defaultlistmodel

我有一个JList,JList的每个项目都有不同的显示文本和工具提示文本。我想将'DefaultListModel'用于JList。我的问题是,在将项目添加到DefaultListModel时,是否可以以某种方式保存工具提示文本。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以覆盖getToolTipText(...)方法以提供自定义工具提示。

例如:

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

无需覆盖getToolTipLocation(...)

编辑:

  

我想在模型中保存自定义文本

然后,您需要在模型中保存自定义对象,该对象包含列表中显示的值和工具提示的文本。

查看ComboBox With Hidden Data以获取使用此方法创建对象的示例。