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

标签 java image swing jtable defaulttablemodel

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

提前致谢

最佳答案

您可以覆盖prepareRenderer JTable的和setToolTip对于单元格/列/行组件,并为工具顶部使用一些 HTML,如 herehere

enter image description here

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

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

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 的标识符

<小时/>

更新并提供完整示例

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

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

关于java - 将鼠标悬停在 jtable 单元格上时显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602144/

相关文章:

java - 我应该将这些字段放在 MVC 模型中的什么位置?

java - GCS Hadoop 连接器错误 : ClassNotFoundException: com. google.api.client.http.HttpRequestInitializer ls:方案 gs 没有文件系统

java - 在 Android Java 应用程序中解释 JavaScript 的最佳方法

java - 哨兵值(value)实现

javascript - 调整浏览器窗口大小时,缩放图像而不是在图像周围环绕文本

java - 从 map pacman java中删除点

Java TextArea 和 JScrollPane

java - 将对象数组向下转换为类型参数数组

相对于图像的 HTML/CSS 文本

java - PIL库打印的文本没有最好的定义