【问题标题】:Show box on hover of item in jlist在 jlist 中悬停项目时显示框
【发布时间】:2011-03-01 12:30:27
【问题描述】:

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

我该怎么做?这可以在 pidgin 或 spark 等聊天应用中看到。

【问题讨论】:

    标签: swing jlist onhover


    【解决方案1】:

    也许您正在追求类似功能的工具提示。如果是这样,请考虑提供 JLabel 等 ListCellRenderer 组件,并设置 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);
        }
    }
    

    【讨论】:

    • @Andrew:请您详细说明您的答案吗?
    • @Andrew:如果我设置 JLabel 的 ToolTip 那么它只会显示文本。但我想要悬停时的文字和图像
    • @Harry 大多数 Swing 组件(和工具提示)将呈现基本的 HTML。请参阅上面的示例编辑回复。
    • @Andrew:谢谢哥们,我不知道我们可以在工具提示中使用 HTML。
    • @Andrew:这里面有问题。我正在获取图像的字节数组,那么如何将其添加到 img 标签中?
    【解决方案2】:

    这是我将如何尝试实现它:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2012-12-12
      • 2019-07-03
      • 2023-03-09
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多