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

我的梦境 提交于 2019-12-24 08:14:18

问题


I have a JTable where I display some string data formatted using html. I need to show a tool tip based on the text under the mouse pointer

On mouse over "Line1" and "Line2" I need to show different tool tips. Is there any way to achieve this or do I have to use a custom renderer to render each line with a cell and show tool tip based on that ?

Here's the sample code to create the table

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

回答1:


Override the getToolTipText(MouseEvent) method of the component which your TableCellRenderer returns. If you are extending DefaultTableCellRenderer which extends JLabel and returns itself as renderer component, you can override it directly in your subclass.

You should be able to determine over which line the mouse pointer is using MouseEvent#getPoint(). See JTextComponent#viewToModel or JTextArea#getLineOfOffset (if you are using a JTextArea for rendering instead of a JLabel).



来源:https://stackoverflow.com/questions/10352810/java-swing-showing-tool-tip-in-jtable-based-on-text-under-mouse-pointer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!