Swing 在jlist中项目悬停时显示框

Swing 在jlist中项目悬停时显示框,swing,jlist,onhover,Swing,Jlist,Onhover,我想在用户将鼠标悬停在列表中的项目上时显示包含信息的框。大致如下: 我该怎么做?这可以在诸如pidgin或spark之类的聊天应用程序中看到。以下是我将如何尝试实现它: 将MouseListener和MouseMotionListener添加到JList。当鼠标进入列表时,启动一个线程,等待一定的延迟(半秒)。移动或拖动鼠标时,重新启动,等待延迟。当鼠标退出JList时,取消线程。使用这些侦听器也可以跟踪鼠标位置 一旦遇到延迟(这意味着鼠标在整个延迟期间一直停留在列表上,没有移动),然后使用S

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


我该怎么做?这可以在诸如pidgin或spark之类的聊天应用程序中看到。

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

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


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

也许您想要的是类似工具提示的功能。如果是这样,请考虑提供ListCellRenderer组件(如JLabel),并设置JLabel的工具提示

例如,在工具提示中使用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);
    }
}
import javax.swing.*;
类LabelWithHtmlTooltip{
公共静态void main(字符串[]args){
Runnable r=新的Runnable(){
公开募捐{
字符串html=“”+
“标题”+
"";
JLabel label=新的JLabel(“指向我!”);
label.setToolTipText(html);
showMessageDialog(空,标签);
}
};
SwingUtilities.invokeLater(r);
}
}

@Andrew:请详细说明您的答案好吗?@Andrew:如果我设置了JLabel的工具提示,那么它将只显示文本。但我想要文字和图像hover@Harry大多数Swing组件(和工具提示)将呈现基本HTML。请参见上面编辑的回复示例。@Andrew:Thnx buddy我不知道我们可以在工具提示中使用HTML。@Andrew:这有一个问题。我正在获取图像的字节数组,那么我如何才能将其添加到img标记中?