Java JTable标题每列的工具提示文本

Java JTable标题每列的工具提示文本,java,swing,jtable,tooltip,Java,Swing,Jtable,Tooltip,当您将鼠标悬停在标题的每个单元格上时,我试图将该单元格中的文本显示为工具提示 我发现您可以为整个标题设置工具提示:table.getTableHeader().setToolTipText(“asdf”)但不能对每个单元格执行类似操作,例如:table.getTableHeader().getColumnModel().getColumn(0.setToolTipText(“asdf”) 当TableCellRenderer中的唯一方法是GetTableCellRenderComponent时,

当您将鼠标悬停在标题的每个单元格上时,我试图将该单元格中的文本显示为工具提示

我发现您可以为整个标题设置工具提示:
table.getTableHeader().setToolTipText(“asdf”)但不能对每个单元格执行类似操作,例如:
table.getTableHeader().getColumnModel().getColumn(0.setToolTipText(“asdf”)


当TableCellRenderer中的唯一方法是
GetTableCellRenderComponent
时,我已经看过但不理解如何重写
GetToolTiptText


我发现的唯一一个类是JComponent,它是这个getToolTiptText。请参阅上Swing教程的部分

我建议使用这种方法,因为每个LAF都可以有自己的自定义渲染器,所以扩展默认渲染器并不适用于所有LAF

Windows表头与MAC表头不同,MAC表头与Nimbus表头不同

是说创建我自己的TableHeader吗

它覆盖了创建
JTableHeader
的代码,因此您可以覆盖JTableHeader的
getToolTipText(MouseEvent)
方法,以便根据鼠标位置提供自己的工具提示。示例代码只是从数组中获取工具提示

我仍然可以使用鼠标下的文本作为工具提示吗


如果需要标题文本,则需要从JTableHeader获取
TableColumnModel
,然后获取
TableColumn
,然后使用
getHeaderValue()
获取列标题文本

我遇到了这个问题,因为它与我所需要的类似——我想为列标题添加工具提示。由camickr链接的Oracle演示示例通过JTable创建中的附加代码启用了工具提示。该示例引导我朝着正确的方向前进,我让它以类似的方式工作,但这样做的方式是每次更新表时初始化一个新的JTable。以前,我只是使用myJTable.setModel()更新表。另外,Oracle的例子看起来很混乱,有点混乱。我不需要扩展AbstractTableModel,因为它看起来根本不会影响工具提示

那么,我怎样才能在每次都不创建新的JTable和不造成混乱的情况下获得列标题工具提示呢?JTable初始化中的关键代码是重写JTable“protected JTableHeader createDefaultTableHeader()”中的一个方法,该方法当然允许使用带有工具提示的表头(JTableHeader)。JTableHeader是我真正想做的

我所做的是创建了一个扩展了JTableHeader的新类,以便在构造函数中包含一个tooltips字符串数组和一个GetToolTiptText()方法(与示例相同,只是没有字符串提示),然后执行myJTable.setTableHeader()将其设置为具有tooltips字符串数组的新类的实例

(我将此作为一个答案发布,因为它太复杂,无法发表评论,但可能对其他人有用)

下面是我更新表时GUI类中的代码-

myJTable.setModel(new javax.swing.table.DefaultTableModel(
            tableData,
            colHeader
        ));//setting the new data and col headers! (no tooltips yet)

MyTableHeader headerWithTooltips = new MyTableHeader(myJTable.getColumnModel(), colHeaderTooltips);//make a new header that allows for tooltips
myJTable.setTableHeader(headerWithTooltips);//use that header in my table
这是我的MyTableHeader类-

class MyTableHeader extends JTableHeader {

    String[] tooltips;

    MyTableHeader(TableColumnModel columnModel, String[] columnTooltips) {
      super(columnModel);//do everything a normal JTableHeader does
      this.tooltips = columnTooltips;//plus extra data
    }

    public String getToolTipText(MouseEvent e) {
        java.awt.Point p = e.getPoint();
        int index = columnModel.getColumnIndexAtX(p.x);
        int realIndex = columnModel.getColumn(index).getModelIndex();
        return this.tooltips[realIndex];
    }
}

gettableCellRenderComponent
返回
Component
,您要在
gettableCellRenderComponent
方法和@MadProgrammer中设置工具提示的就是这个组件,第二个链接非常完美,谢谢!如果你赶快写一个答案,我会接受的。谢谢:)如果它解决了你的问题,我就把它标记为一个重复的问题;)请参见上的Swing教程中的部分。我建议使用这种方法,因为每个LAF都可以有自己的自定义渲染器,因此扩展默认渲染器并不适用于所有LAF。
我认为每次更新表时创建一个新的JTable很奇怪。
-不需要创建新的JTable。不知道你是从哪里得到这个主意的。您可以更新当前模型,也可以为表格设置新模型。@camickr好吧,我遵循了这个示例,当它启用工具提示时就是这样做的(好的,它只做了一次,但它无法帮助您了解如何使用新表格数据和标题调整工具提示)。这是在JTable创建中完成的。--JTable table=new JTable(new MyTableModel()){…我将在上面的回答中重写它。那么我的答案看起来还可以吗?
但它无助于找出如何使用新的表数据和标题调整工具提示
-您不需要做任何事情。该代码现在是JTable类的一部分,如果TableModel发生更改,将执行该代码。