在 JTable 中创建鼠标悬停信息面板?工具提示可能还不够

2024-04-18

我想在鼠标悬停时显示一个信息框JTable细胞使用Java 摇摆,所以有多个部分

  1. 如何捕获表格单元格中的鼠标悬停事件?我必须能够设置单元格内容,然后获取其数据。
  2. 如何将鼠标悬停在该单元格上时显示带有动态服务器数据的面板/框?
  3. 如何缓存信息面板/框,这样我就不必在每次鼠标悬停时查询服务器?

Example:

在表格单元格中,我输入:94903。按 Tab 键或输入后,单元格将设置为数字。鼠标悬停时,会显示一个包含姓名、地址、电话号码、电子邮件等的框。

Thanks!


您可以使用 HTML 格式化工具提示文本,这将允许您向工具提示提供复杂的信息结构,而无需或花费编写自己的解决方案。唯一的问题是工具提示将被自动丢弃。

如果这仍然不适合,您可以尝试:

import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.*;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.Timer;

public class TestTable {

    private Timer showTimer;
    private Timer disposeTimer;
    private JTable table;
    private Point hintCell;
    private MyPopup popup; // Inherites from JPopupMenu

    public TestTable() {

        showTimer = new Timer(1500, new ShowPopupActionHandler());
        showTimer.setRepeats(false);
        showTimer.setCoalesce(true);

        disposeTimer = new Timer(5000, new DisposePopupActionHandler());
        disposeTimer.setRepeats(false);
        disposeTimer.setCoalesce(true);

        table.addMouseMotionListener(new MouseMotionAdapter() {

            @Override
            public void mouseMoved(MouseEvent e) {

                Point p = e.getPoint();
                int row = table.rowAtPoint(p);
                int col = table.columnAtPoint(p);

                if ((row > -1 && row < table.getRowCount()) && (col > -1 && col < table.getColumnCount())) {

                    if (hintCell == null || (hintCell.x != col || hintCell.y != row)) {

                        hintCell = new Point(col, row);
                        Object value = table.getValueAt(row, col);
                        // Depending on how the data is stored, you may need to load more data
                        // here...
                        // You will probably want to maintain a reference to the object hint data

                        showTimer.restart();

                    }

                }

            }
        });

    }

    protected MyPopup getHintPopup() {

        if (popup == null) {

            // Construct the popup...

        }

        return popup;

    }

    public class ShowPopupActionHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (hintCell != null) {

                disposeTimer.stop(); // don't want it going off while we're setting up

                MyPopup popup = getHintPopup();
                popup.setVisible(false);

                // You might want to check that the object hint data is update and valid...
                Rectangle bounds = table.getCellRect(hintCell.y, hintCell.x, true);
                int x = bounds.x;
                int y = bounds.y + bounds.height;

                popup.show(table, x, y);

                disposeTimer.start();

            }

        }
    }

    public class DisposePopupActionHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            MyPopup popup = getHintPopup();
            popup.setVisible(false);

        }
    }
}

现在,我还没有构建弹出窗口,我也会使用 Bob Sinclar 的答案中的弹出菜单

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JTable 中创建鼠标悬停信息面板?工具提示可能还不够 的相关文章

随机推荐

  • AT+CMGS 无法正常工作

    我在发送短信时遇到 AT 命令问题 AT CMGS 发送后AT CMGS
  • 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

    我正在研究推荐引擎 用户数据被收集 他们的友谊 位置 喜欢 教育 并已存储在 mongodb 中 我需要向这些用户推荐相关产品 我计划使用 Neo4j 作为推荐引擎 原因很明显 易于节点之间的遍历 路径信息 问题是我必须首先将 mongod
  • ResultReceiver 给出 Nullpointer 异常

    我正在使用地理编码来检索纬度 经度值的地址 我在扩展 IntentService 的单独类中实现此地理编码 当我检索地址时 我想将其发送回原始主要活动 为此我使用 ResultReciever 并实际上遵循tutorial https de
  • 如何通过HTTP Google Cloud Function上传图像文件?

    我已阅读有关如何将图像上传到存储桶并通过后台功能进行后期处理的教程 但我的要求是上传图像 进行后处理并立即通过HTTP函数返回结果 请让我知道这是否是正确的方法 因为我在网上没有得到太多关于这方面的材料 以下是我的做法 HTTP云功能 ex
  • Github v3 API 让所有组织超过 100

    我正在尝试让所有组织项目通过 默认大小似乎是 30 而 100 似乎是每个请求的最大限制 但上面的链接仍然只返回前 100 项 即不是第 101 200 项 我也尝试过 http host api v3 organizations page
  • 以编程方式截取网页屏幕截图[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WPF 3D 旋转球体 GUI

    我一直在尝试在 WPF 中为我的课堂作业制作 3D 用户界面 但遇到了一个问题 现在 2 3 天都无法解决 我尝试用谷歌搜索答案 我查看了一些 stackoverflow 帖子 但还没有一个可以帮助我解决问题 情况是这样的 我有一个 3D
  • 如何在 xcode 中打印或查看方法调用堆栈?

    我正在开发我的 iPad 应用程序 运行代码时 表视图中有一种方法 据我们所知 cellForRowAtIndexPath 该方法可以被调用多次 就像一会儿 scrolling table view cells Or table view
  • mysqli_stmt::bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配,无法更新

    我在提交或更新此数据时遇到问题 数据无法更新 这段代码 if isset GET newsid if isset POST submit sql connect gt prepare UPDATE news set title short
  • Rails:特定 HTTP 错误代码的自定义行为

    我正在开发一个 RoR 网站 希望单独处理服务器错误 400 404 500 等 另外 由于网站是动态的 我想在 Rails 环境中处理错误 而不是在服务器级别 我想做的一个例子是 当用户遇到无法加载或根本不存在的页面或模板时 向用户提供可
  • 从Excel VBA中的单元格范围中删除重复项

    我正在尝试删除 Excel 2013 VBA 中的重复项 但我收到错误 对象不支持此属性或方法 问题是我没有静态范围可供选择 我想从列标题 abcd 中删除重复项 Cells Find what abcd Activate ActiveCe
  • 检查数组中是否存在值(Laravel 或 Php)

    我有这个数组 list desings ids array hc1wXBL7zCsdfMu dhdsfHddfD otheridshere 使用 die var dump 这个数组返回我 array 2 0 gt hc1wXBL7zCsdf
  • Socket.IO中的跨域连接

    是否可以跨域方式使用Socket IO 如果是这样 怎么办 网络上提到了这种可能性 但没有给出任何代码示例 引用socket io 常见问题解答 http socket io faq Socket IO支持跨域连接吗 当然 在每个浏览器上
  • 创建一个加载器,其中线在中心形成一个圆

    这是我的代码 circle border 1px solid transparent border radius 50 width 100px overflow hidden div7 width 100px height 10px bac
  • 正确使用 zend 框架中的语言

    我有一个带有两个模块 管理和公共 的 Zend 应用程序 对于公共 我有以下插件来解析我的友好 URL class Custom Controller Plugin Initializer extends Zend Controller P
  • seq 和 list 之间的区别

    Clojure 语言中的 seq 和列表有什么区别 list 1 2 3 gt 1 2 3 seq 1 2 3 gt 1 2 3 这两种形式似乎被评估为相同的结果 首先 它们可能看起来相同 但实际上并非如此 class list 1 2 3
  • Android 中的文件浏览

    是否有特定的视图 小部件可用于浏览设备上的文件 或者还有其他已被接受的解决方案吗 搜索对我来说有用的信息很少 不幸的是 没有用于浏览文件的特殊视图 小部件 不过自己写也不是很难 谷歌搜索可以找到许多用于文件浏览的公共资源 意图 总体思路很简
  • Episerver - 为什么 BlockData 不实现 IContent

    有谁知道为什么 BlockData 类不直接实现 IContent 我知道在从数据库检索 BlockData 期间 Castle 创建的代理实现了 IContent 如果 StackOverflow 不适合此类问题 请移走它 EPiServ
  • 如何将内容安全策略与本地主机文件一起使用

    我的页面上出现以下错误 Refused to load the script http 127 0 0 1 35729 livereload js because it violates the following Content Secu
  • 在 JTable 中创建鼠标悬停信息面板?工具提示可能还不够

    我想在鼠标悬停时显示一个信息框JTable细胞使用Java 摇摆 所以有多个部分 如何捕获表格单元格中的鼠标悬停事件 我必须能够设置单元格内容 然后获取其数据 如何将鼠标悬停在该单元格上时显示带有动态服务器数据的面板 框 如何缓存信息面板