【发布时间】:2012-03-17 01:09:42
【问题描述】:
我有一个表格,其中每一行代表一张图片。在列路径中,我存储了它的绝对路径。字符串有点长,我希望当我将鼠标悬停在特定单元格上时,应在鼠标旁边弹出一个工具提示,其中包含来自单元格的信息。
【问题讨论】:
标签: java swing jtable tooltip listener
我有一个表格,其中每一行代表一张图片。在列路径中,我存储了它的绝对路径。字符串有点长,我希望当我将鼠标悬停在特定单元格上时,应在鼠标旁边弹出一个工具提示,其中包含来自单元格的信息。
【问题讨论】:
标签: java swing jtable tooltip listener
您说您将绝对路径存储在单元格中。您可能正在使用JLabel 来设置绝对路径字符串。假设你的单元格中有一个标签,使用 html 标签来表达工具提示内容:
JLabel label = new JLabel("Bla bla");
label.setToolTipText("<html><p>information about cell</p></html>");
setToolTipText() 可用于其他一些 Swing 组件,如果您使用的不是 JLabel 的话。
【讨论】:
我假设您没有为路径编写自定义CellRenderer,而只是使用DefaultTableCellRenderer。您应该继承DefaultTableCellRenderer 并在getTableCellRendererComponent 中设置工具提示。然后设置列的渲染器。
class PathCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel c = (JLabel)super.getTableCellRendererComponent( /* params from above (table, value, isSelected, hasFocus, row, column) */ );
// This...
String pathValue = <getYourPathValue>; // Could be value.toString()
c.setToolTipText(pathValue);
// ...OR this probably works in your case:
c.setToolTipText(c.getText());
return c;
}
}
...
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. java.io.File) you could set the renderer for that type
...
【讨论】:
DefaultTableCellRenderer 子类化,它具有非抽象方式的方法,并且本身就是JLabel?
DefaultTableCellRenderer 是按层次结构的JLable 并被强制转换为此,因此可以使用它的所有方法。
getTableCellRendererComponent 方法的值在这里很重要。这里的第二个参数对象值必须是您的列的值。然后你可以试试JLabel cellComponent = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 然后cellComponent.setToolTipText(value.toString());
在创建 JTable 对象时使用下面的代码。
JTable auditTable = new JTable(){
//Implement table cell tool tips.
public String getToolTipText(MouseEvent e) {
String tip = null;
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
try {
tip = getValueAt(rowIndex, colIndex).toString();
} catch (RuntimeException e1) {
//catch null pointer exception if mouse is over an empty line
}
return tip;
}
};
【讨论】:
getRowSorter().convertRowIndexToModel(rowIndex) 和 getRowSorter().convertRowIndexToModel(rowIndex) 从模型中获取准确的行。
JTable.getValueAt 使用视图索引。仅当您使用模型查找值(即getModel( ).getValueAt)时,才需要模型索引。因此,在编写示例时,它将在对表进行排序或过滤等时起作用。