将鼠标悬停在 jtable 单元格上时显示图像

2024-01-10

我有一个使用 DefaultTableModel 创建的 JTable,我想在鼠标悬停在该 JTable 的特定单元格上时显示图像,并且我需要每个单元格的图像都不同。

提前致谢


您可以覆盖prepareRenderer of the JTable and setToolTip对于单元格/列/行组件,并为工具顶部使用一些 HTML,如下所示here https://stackoverflow.com/a/22246185/2587435 and here https://stackoverflow.com/a/22255541/2587435

对于每个不同的图像,您将需要获取不同的 URL 作为src of the img标签。为此,您需要了解一些基本的 HTML。您可以使用以下方式获取 URLgetClass().getResource()对于类路径中的图像。或者你可以使用File.getUri().getUrl()获取文件系统上的图像文件。上面的链接之一还显示了如何从关系数据库获取图像。

无论您以何种方式获取 URL,您都将使用它作为 URL 中的 URL<img src标签。类似的东西(来自链接的答案):

URL url = getClass().getResource("/path/to/image");
String html = "<html><body>"
        + "<img src='"
        + url
        + "' width=150 height=150> ";

jc.setToolTipText(html + "<br/>"
        + getValueAt(row, column).toString()
        + ":  row, col (" + row + ", " + column + ")"
        + "</body></html>");

您需要以某种方式组织图像,使模型中的数据能够以某种方式对应于可用于获取 URL 的路径。假设您有一个名称作为表中的一段数据,那么您希望能够使用该名称作为获取 URL 的标识符


UPDATE有完整的例子

鉴于这是我的以下项目结构

ProjectRoot
          src
             resources
                    mario
                         Mario.png
                         Luigi.png

以下作品

import java.awt.Component;
import java.net.URL;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class TableTooltipDemo {

    public TableTooltipDemo() {
        JTable table = getTable(getModel());
        JFrame frame = new JFrame("Table ToolTip");
        frame.add(new JScrollPane(table));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JTable getTable(DefaultTableModel model) {
        JTable table = new JTable(model) {
            @Override
            public Component prepareRenderer(TableCellRenderer renderer,
                    int row, int col) {

                Component c = super.prepareRenderer(renderer, row, col);
                if (c instanceof JComponent) {
                    JComponent jc = (JComponent)c;
                    String name = getValueAt(row, 0).toString();
                    String html = getHtml(name);
                    jc.setToolTipText(html);
                }   
                return c;
            }
        };
        return table;
    }

    private String getHtml(String name) {
        URL url = getClass().getResource("/resources/mario/" + name + ".png");
        String html
        = "<html><body>"
        + "<img src='"
        + url
        + "' width=150 height=150></body></html>";
        return html;
    }

    private DefaultTableModel getModel() {
        String[] cols = { "Name", "Age", "Message" };
        Object[][] data = { { "Mario", 32, "I am Mario!" },
                { "Luigi", 32, "I am Luigi!" },
                { "Bowser", 32, "I am Bowser!" },
                { "Princess", 32, "I am Princess!" },
                { "Koopa", 32, "I am Koopa!" } };
        DefaultTableModel model = new DefaultTableModel(data, cols);
        return model;
    }

    public static void main(String[] args) {

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

将鼠标悬停在 jtable 单元格上时显示图像 的相关文章

随机推荐

  • Jqgrid列标题和数据未对齐

    我有一个动态表 是在 C 后面的代码中生成的 我使用 tabletogrid 将此 html 表转换为 Jqgrid 我用来执行此操作的代码是 tableToGrid gvSearchDocuments height auto autowi
  • Laravel - Livewire,如何自定义全局消息URL?

    使用如下例所示的自定义域并不告诉 Livewire 请求以相同的子域为前缀subdomain1在这个例子中 Route domain subdomain1 env APP DOMAIN localhost gt middleware web
  • 在类型化数组中存储符合泛型协议的对象

    我有一个协议 protocol Adjustable Equatable associatedtype T var id String get set var value T get set init id String value T 以
  • 使用mapstruct中的构建器(使用不可变注释处理器)将对象映射到不可变对象

    我们正在使用不可变框架 http immutables github io 生成所有 DTO 现在我们想将这些对象映射到另一个映射结构 http mapstruct org 但生成的 DTO 是不可变的 没有 setter 和构造函数 这与
  • GCC 4.8.1 无法识别的命令行选项“-std=c++11”

    在网上看了很多文献 看来最近的GCC版本肯定支持 std c 11命令行选项 但由于一些疯狂的原因 即使使用 GCC 4 8 1 我也会得到 无法识别的命令行选项 这没有任何意义 C newmingw mingw32 bin gt g v
  • 如何使用 C# 在 firebird 中执行事务(或多个 sql 查询)

    我尝试了多种方法 包括SO 以下 MYSQL 代码在 Firebird 中不起作用 CREATE TABLE publications INT NOT NULL AUTO INCREMENT PRIMARY KEY id filename
  • powershell删除特定注册表项

    我是 PowerShell 新手 我正在尝试从运行注册表项中删除特定值 我正在使用remove item命令 但是 我没有看到用于指定单个值的开关 我不想删除整个键 只想删除一个值 作为参考 我正在尝试执行的批处理等效项 reg delet
  • 可插入注释处理器 API 可以检索源代码注释吗?

    我正在使用 Java6 的可插入注释处理 api 自动创建一些部署 XML 文件 这些 XML 文件的一部分包含对象的描述 描述始终与与类本身关联的 Javadoc 内容相同 我可以强制注释成为 Block 注释的字段 但这会重复信息 在注
  • 如何在基于时间的模拟游戏中防止基于时间的作弊?

    在iPhone游戏 Tiny Tower 中 我猜测它使用了某种基于上次玩游戏和当前时间之间花费的时间的模拟 因为你可以将当前时间向前设置 你将从假中受益经过的时间跨度 有没有一种算法可以用来防止这种事情发生 或者至少让普通用户很难实现 编
  • 如何在 Scala 中使用命名参数创建自定义函数类型?

    假设我想创建一个名为 ImportFunc 的自定义函数类型 它接受一个名为 fileImportID 的 Int 和一个名为 filename 的字符串 我可以使用类型别名很容易地做到这一点 如下所示 type ImportFunc In
  • 错误“元素不能包含空格。内容模型为空。”是什么意思?意思是?

    我正在为一个简单的 xml 组合一个 xml 模式 请参阅下面的 xml 和模式 但我不断收到有关节节点的以下错误 元素不能包含空格 内容模型为空 浏览网络我找不到任何简洁的解释来解释它的含义 所以我可以修复它 有人可以帮忙吗 编辑 感谢大
  • np.where(条件为 None) 不等于 np.where(条件 == None)

    我对 np where 函数感到困扰 在我的示例中为第 7 行 背景 我正在编写 连四子 游戏 这insert chip 方法访问变量self board这是我个人数据类型的 8x8 np 数组Chip 如果没有chip在一个条目中self
  • Angular 2 HTTP GET 返回 URL null

    我正在尝试使用 Angular 2 和 Typescript 发出一个简单的 HTTP GET 请求 我收到 404 错误 网址为空 下面显示的是我的组件文件以及我收到的错误 import Component OnInit from ang
  • 如何访问成员变量sqlite回调

    我需要从 sqlite 回调函数访问类中的变量 它不能是静态的 因为我需要从其他函数访问这个变量 这是我当前的代码 class fromdb private string paramdb char errmsg string param s
  • Chrome 正在由自动化测试软件控制

    我正在 Chrome 中使用 Serenity BDD Selenium 运行自动化测试 我必须下载新的 ChromeDriver 因为我的测试无法运行 gt 测试将打开 ChromeDriver 但无法 以用户身份浏览 当我用谷歌搜索这个
  • 为什么声明转换不会减少 cookie 大小?

    我正在使用 Azure AD net core 2 1 并已注册我的应用程序并将其配置为返回 AD 组作为声明 我还使用声明转换来删除除我的应用程序使用的三个组之外的所有组声明 这成功地消除了 100 多个组 我这样做是希望能够减少后续请求
  • SQL Server 2008 - 连接字符串

    我需要获取每个行项目的查询结果 并构建一个以分号分隔的组成该项目的材料列表 架构构成 表格 LineItems 唯一项目列表 LineItems Materials 多对多 材料 独特材料清单 行项目 ID 行项目 1 1A 1 LineI
  • 覆盖 ComboBox 中的默认 TextBlock 样式

    我在 App xaml 中定义了默认的 TextBlock 样式 它似乎也会影响 ComboBox 项目的文本颜色 现在 如何显式设置主窗口中定义的 ComboBox 的文本颜色 我想保留默认样式 但将组合框文本颜色设置为蓝色而不是红色 A
  • Unity3d android 2d 精灵放置

    Please take a look at this picture It s a final look of the game exported from photoshop I marked the ui sprites with re
  • 将鼠标悬停在 jtable 单元格上时显示图像

    我有一个使用 DefaultTableModel 创建的 JTable 我想在鼠标悬停在该 JTable 的特定单元格上时显示图像 并且我需要每个单元格的图像都不同 提前致谢 您可以覆盖prepareRenderer of the JTab