我想知道如何在一个单元格上实现鼠标悬停,如果一列太短,无法显示全文。
所以,如果我有一个固定宽度的列,而文本太长,如何在单元格中用鼠标悬停显示整个文本。
您可以通过覆盖在任何单元格上动态添加鼠标悬停工具提示
AbstractTable
中的execDecorateCell(Cell view, ITableRow row, IColumn<?> col)
方法,并设置类似的工具提示文本
@Override
protected void execDecorateCell(Cell view, ITableRow row, IColumn<?> col) {
super.execDecorateCell(view, row, col);
view.setTooltipText("Hi there: " + view.getText());
}
不幸的是,如果您的文本长度超过了列/单元格的长度,则不会考虑。它将在任何情况下设置工具提示文本!到目前为止,我不确定是否(或如何)可以计算(以像素为单位?),如果单元格内的实际字符串长度超过一列的长度。也许您可以尝试一些方法,将实际字符串长度(java.lang.String.length()
)考虑在内,并且只有在给定特定长度时才提供工具提示。
请告诉我,如果这对你有用的话!
谨致问候,
Matthias
当前只有在无法调整列大小的情况下,才会显示表单元格中截断文本的工具提示。这是有目的的,因为工具提示可能非常烦人。对此负责的代码在文件Table.js:中
scout.Table.prototype._isTruncatedCellTooltipEnabled = function(column) {
return !this.headerVisible || column.fixedWidth;
};
如果您不喜欢这种行为,可以调整JavaScript代码。主要有两种方法:
- 替换原始函数
- 扩展表并覆盖函数
使用第一种方法,您可以替换实际功能,因此每次侦察都是如此。表创建时使用此函数。对于第二种方法,您需要确保使用了新表。为了做到这一点,你需要在对象类型和构造函数之间指定一个映射,每当使用scout.create(objectType)创建对象时,就会使用该映射。这通常是按照约定完成的,所以如果你编写scout.ccreate('Table'),就会创建一个新的scout。将创建表。因为您现在想要创建一个自定义表,所以需要将映射添加到scout.objectFactories.
对我来说,第一种方法更像是打补丁,而第二种方法是更清洁的解决方案。第二种解决方案的优点是原始对象保持不变,并且至少在理论上仍然可以创建规则表。这就是为什么我建议使用第二种方法。但归根结底,这可能是一个品味问题。
在这两种方式中,您都需要创建一个或多个JavaScript文件,将它们注册到您的project-module.js中,并将此模块包含在index.html中
方法1:
patches.js
scout.Table.prototype._isTruncatedCellTooltipEnabled = function(column) {
return true;
};
方法2
CustomTable.js
scout.CustomTable = function() {
scout.CustomTable.parent.call(this);
};
scout.inherits(scout.CustomTable, scout.Table);
/**
* @override
*/
scout.CustomTable.prototype._isTruncatedCellTooltipEnabled = function(column) {
return true;
};
objectFactories.js
scout.objectFactories = $.extend(scout.objectFactories, {
'Table': function() {
return new scout.CustomTable();
}
});
请记住:scout JavaScript代码不是api,可能随时更改。如果函数将按照您对java的习惯进行重命名,则不会出现编译错误。因此,在添加大量自定义JavaScript代码来调整默认行为之前,您应该考虑先打开一个bug,以便在Scout中修复它。它也可以帮助其他人。