2

当用户将鼠标悬停在列表中的项目上时,我想显示包含信息的框。如下所示:

在此处输入图像描述

我怎样才能做到这一点?这可以在 pidgin 或 spark 等聊天应用程序中看到。

4

2 回答 2

1

以下是我将如何尝试实现它:

将 MouseListener 和 MouseMotionListener 添加到您的 JList。当鼠标进入列表时,启动一个线程等待一定的延迟(半秒)。当鼠标移动或拖动时,重新启动等待延迟。当鼠标退出 JList 时,取消线程。使用这些侦听器也可以跟踪鼠标位置。

一旦满足延迟(这应该意味着鼠标一直停留在列表上,没有移动,整个延迟),然后使用 SwingUtilities.invokeLater 显示信息框。您可以使用 JList 的 locationToIndex 来确定鼠标悬停在哪一行。

于 2011-03-01T12:58:58.020 回答
1

也许您正在追求类似功能的工具提示。如果是这样,请考虑提供一个 ListCellRenderer 组件,例如 JLabel,并设置 JLabel 的工具提示。

EG 在工具提示中使用 HTML 渲染。

import javax.swing.*;

class LabelWithHtmlTooltip {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                String html = "<html><body>" +
                    "<h1>Header</h1>" +
                    "<img src='http://pscode.org/media/starzoom-thumb.gif' " +
                    "width='160' height='120'>";
                JLabel label = new JLabel("Point at me!");
                label.setToolTipText(html);
                JOptionPane.showMessageDialog(null, label);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
于 2011-03-01T14:07:22.200 回答