JTable中单元格的工具提示位置

我有一个JTable ,我想在JTable中更改单元格工具提示的默认位置。 我想在其他地方显示单元格工具提示,而不是在同一单元格的顶部。 基本上我想完全控制该工具提示的行为。 有什么建议么?

我觉得这比我想象的容易得多。

基本上,如果覆盖JTablegetToolTipLocation ,则可以指定工具提示的位置,即使该提示来自单元格渲染器,例如

提示

 import java.awt.BorderLayout; import java.awt.Component; import java.awt.EventQueue; import java.awt.Point; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { public TestPane() { setLayout(new BorderLayout()); DefaultTableModel model = new DefaultTableModel(0, 10); for (int row = 0; row < 10; row++) { Object[] data = new Object[10]; for (int col = 0; col < 10; col++) { data[col] = row + "x" + col; } model.addRow(data); } JTable table = new JTable(model) { @Override public Point getToolTipLocation(MouseEvent event) { return new Point(10, 10); } }; table.setDefaultRenderer(Object.class, new TestCellRenderer()); add(new JScrollPane(table)); } public class TestCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setToolTipText("Banana @ " + value.toString()); return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } } } }