Java Swing : Showing tool tip in JTable based on text under mouse pointer

标签 java swing jtable tooltip tablecellrenderer

我有一个 JTable,我在其中显示一些使用 html 格式化的字符串数据。我需要根据鼠标指针下的文本显示工具提示

enter image description here

将鼠标悬停在“Line1”和“Line2”上时,我需要显示不同的工具提示。有什么方法可以实现这一点,还是我必须使用自定义渲染器来渲染带有单元格的每一行并显示基于该单元格的工具提示?

下面是创建表格的示例代码

package com.sample.table;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.*;

public class SampleTable {

private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("SampleTable");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.getContentPane().add(createTablePanel(), BorderLayout.CENTER);

    //Display the window.
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

public static JPanel createTablePanel(){
    JPanel tablePanel = new JPanel();

    JTable table = createTable();
    table.setFillsViewportHeight(true);
    table.setRowHeight(45);
    addListener(table);

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(300, 120));

    tablePanel.add(scrollPane);

    return tablePanel;
}

private static void addListener(JTable table) {
    table.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseMoved(MouseEvent e) {
            if(e.getSource() instanceof JTable){
                JTable table = (JTable)e.getSource();

                table.setToolTipText("Some tooltip");
            }

        }

        @Override
        public void mouseDragged(MouseEvent e) {
            // do nothing

        }
    });

}

public static JTable createTable(){
    String[] columnNames = {"Column1", "Column2"};
    Object[][] data = {{"1", "<html>Line1<br/>Line2</html>"},
                        {"2", "<html>Line1<br/>Line2</html>"}};

    JTable table = new JTable(data, columnNames);

    return table;
}



public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}

最佳答案

覆盖 TableCellRenderer 返回的组件的 getToolTipText(MouseEvent) 方法。如果您正在扩展 DefaultTableCellRenderer,它扩展了 JLabel 并将其自身作为渲染器组件返回,您可以直接在子类中覆盖它。

您应该能够确定鼠标指针在哪一行上使用 MouseEvent#getPoint()。请参阅 JTextComponent#viewToModelJTextArea#getLineOfOffset(如果您使用 JTextArea 而不是 JLabel 进行渲染) .

关于Java Swing : Showing tool tip in JTable based on text under mouse pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352810/

相关文章:

Java 小服务程序 : how to display a page?

java - 如何实现与 JTable 交互的 JTable 选择

java - 无法在 map 中设置通用属性的值

java - 如何让我的客户端与我的服务器对话?

java - 创建线程后如何将信息传递给线程

java - 如何在 java 中使一整列不可选择?

Java 在 Windows 资源管理器中选择文件?

java - GridBag/面板显示

java - JTable 复选框应在选中时启动计时器

java - 如何使用JTable显示Java中的所有行? [解决了]