当您将鼠标悬停在该单元格上时,我试图将标题的每个单元格中的文本显示为工具提示。
我发现您可以为整个标头设置工具提示:$window.onpopstate = function(e) {
$window.alert("location: " + $location.path());
}
但不能对每个单元格执行类似操作,例如:table.getTableHeader().setToolTipText("asdf");
我看过this question,但当TableCellRenderer中唯一的方法是table.getTableHeader().getColumnModel().getColumn(0).setToolTipText("asdf");
时,无法理解如何覆盖getToolTipText
。
我发现这个getToolTipText的唯一一个类是JComponent
答案 0 :(得分:3)
请参阅Specifying Tooltips For Column Headers上的Swing教程中的部分。
我会推荐这种方法,因为每个LAF都有自己的自定义渲染器,因此扩展默认渲染器不适用于所有LAF。
Windows表头与MAC表头不同,后者与Nimbus表头不同。
是说要创建我自己的TableHeader吗?
它覆盖了创建JTableHeader
的代码,因此您可以覆盖JTableHeader的getToolTipText(MouseEvent)
方法,以便根据鼠标位置提供自己的工具提示。示例代码只是从Array获取工具提示。
我是否仍然可以使用鼠标下的文字作为工具提示?
如果您需要标题文本,则需要从JTableHeader获取TableColumnModel
,然后获取TableColumn
,然后使用getHeaderValue()
获取列标题的文本。
答案 1 :(得分:0)
我遇到过这个,因为它与我需要的类似 - 我想为列标题添加工具提示。由 camickr 链接的Oracle演示示例通过JTable创建中的其他代码启用了工具提示。这个例子引导我朝着正确的方向前进,我让它的工作方式相似,但这样做的方法是每次更新表时初始化一个新的JTable。之前,我只是使用myJTable.setModel()来更新表。此外,Oracle示例看起来很混乱,并且在那里有点令人困惑。我没有必要扩展AbstractTableModel,因为它看起来根本不会影响工具提示。
那么我怎样才能获得列标题工具提示,而不是每次都没有新的JTable而没有混乱? JTable初始化中的关键代码是覆盖JTable"受保护的JTableHeader createDefaultTableHeader()"中的方法。这当然允许带有工具提示的表头(JTableHeader)。 JTableHeader是我真正想要的工作。
我做的是创建了一个扩展JTableHeader的新类,以便它在构造函数中包含一个工具提示String数组和一个getToolTipText()方法(与示例相同,除了String提示),然后我做了myJTable .setTableHeader()将其设置为具有工具提示String数组的新类的实例。
(我将此作为答案发布,因为它过于参与评论,但可能对其他人有用)
当我更新表格时,这是我的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];
}
}