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

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

提前致谢

您可以覆盖JTable prepareRenderer和单元格/列/行组件的setToolTip,并为tooltop使用一些HTML,如此处和此处所示

在此处输入图像描述

对于每个不同的图像,您需要获得一个不同的URL作为img标记的src 。 你需要知道一些基本的HTML。 您可以通过使用类路径中的图像的getClass().getResource()来获取URL。 或者您可以使用File.getUri().getUrl()来获取文件系统上的图像文件。 上面的链接之一还显示了如何从关系数据库中获取图像。

无论您获取URL的方式如何,都将使用它作为标记中的URL。 像(来自链接的答案):

 URL url = getClass().getResource("/path/to/image"); String html = "" + " "; jc.setToolTipText(html + "
" + getValueAt(row, column).toString() + ": row, col (" + row + ", " + column + ")" + "");

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


更新完整的示例

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

 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 = "" + ""; 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(); } }); } } 

您需要使用自定义TableCellRenderer

如果您从扩展JLabel DefaultTableCellRenderer setIcon子类,则可以使用渲染器的setIcon方法非常轻松地引入图像,并为其提供包含在ImageIcon一个图像。

如果这是您第一次使用渲染器,我建议您阅读以下教程: 自定义表格渲染器