我想知道如果列对于全文来说太短,如何在单元格上实现鼠标悬停。
因此,如果我的列具有固定宽度,并且文本太长,则如何使用鼠标悬停在单元格中显示整个文本。
答案 0 :(得分:1)
您可以通过覆盖
在任何单元格上的工具提示上动态添加鼠标execDecorateCell(Cell view, ITableRow row, IColumn<?> col)
中的 AbstractTable
方法,并将工具提示文本设置为
@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
答案 1 :(得分:1)
如果无法调整列的大小,则仅显示表格单元格中截断文本的工具提示。这是出于目的而完成的,因为工具提示可能非常烦人。负责此操作的代码位于Table.js文件中:
scout.Table.prototype._isTruncatedCellTooltipEnabled = function(column) {
return !this.headerVisible || column.fixedWidth;
};
如果您不喜欢此行为,则可以调整JavaScript代码。这主要有两种方法:
使用第一种方法替换实际函数,因此每次创建scout.Table时都会使用此函数。使用第二种方法,您需要确保使用新表。为此,您需要指定对象类型和构造函数之间的映射,只要使用scout.create(objectType)创建对象,就会使用该映射。这通常是按惯例完成的,所以如果你写scout.create(&#39;表&#39;),就会创建一个新的scout.Table。因为您现在想要创建自定义表,所以需要将映射添加到scout.objectFactories。
对我来说,第一种方法更像是修补,而第二种方法则是更清洁的解决方案。第二种解决方案的优点是原始对象保持不变,至少在理论上,您仍然可以创建常规表。这就是我建议使用第二种方法的原因。但最终这可能是一种品味问题。
在这两种方式中,您需要创建一个或多个JavaScript文件,在yourproject-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,可能随时更改。如果函数将像以前一样用于重命名,那么您将不会遇到编译错误。因此,在添加大量自定义JavaScript代码以调整默认行为之前,您应该考虑首先打开一个错误,以便可以在Scout中修复它。它也可以帮助其他人。