NatTable多行文本过滤失效问题求助及解决方案咨询
过滤功能对多行文本/ASCII字符失效,仅单行单元格正常工作
我的过滤功能仅能正确处理单行单元格,对多行文本甚至ASCII字符都无效。
示例行(含4列)
[1, WELD FIL.. ... MCW430 (REP.. ..bL), 各溶接.. ..と。(..430NbL), X]
- (REP.. ..bL) 属于第2列,但处于新行
- X 字符属于第4列
创建NatTable的代码
private NatTable createTable(Composite parent, List<TableLine> tLines, String[][] propertyNames, PropertyToLabels[] propToLabels, TableParams params, TextMatcherEditor<TableLine>editor, boolean openableParts) { // another code: bodyLayerStack, bodyDataLayer // another code: set row heights, set column widths // another code: columnHeaderDataLayer // another code: include table headers CompositeLayer composite = null; if( propertyNames != null ) { ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer( columnHeaderDataLayer, bodyLayerStack, (SelectionLayer)null); columnHeaderLayer.addConfiguration(NatTableLayerConfigurations.getColumnHeaderLayerConfiguration(false)); SortHeaderLayer<TableLine> sortHeaderLayer = new SortHeaderLayer<TableLine>( columnHeaderLayer, new GlazedListsSortModel<TableLine>( bodyLayerStack.getSortedList(), getSortingColumnPropAccessor(propertyNames[0]), configRegistry, columnHeaderDataLayer)); // another code: setChildLayer, add configurations natTable.configure(); editor.setFilterator(new TextFilterator<TableLine>() { @Override public void getFilterStrings(List<String> baseList, TableLine element) { for( int i = 0; i < element.getLength(); i++ ) baseList.add("" + element.getObjectByColumn(i)); } }); editor.setMode(TextMatcherEditor.REGULAR_EXPRESSION); bodyLayerStack.getFilterList().setMatcherEditor(editor); NatTableContentProvider.addNatTableData(natTable, bodyLayerStack.getSelectionLayer(), bodyLayerStack.getBodyDataProvider()); return natTable; }
调试发现的问题
在ca.odell.glazedlists.impl.filter.TextMatchers.matches(List<String>, TextFilterator<? super E>, SearchTerm<E>[], TextSearchStrategy[], E)方法中,当过滤字符w时,未命中if(filterString != null && textSearchStrategy.indexOf(filterString.toString()) != -1)条件,但第2列的字符串明明以W开头。
我使用的不区分大小写过滤正则为(?i).*w.*(?-i)。
问题咨询
请问是否有可行的替代方案或配置?是否需要在过滤前转换数据?若需转换,该如何操作?由于GlazedLists相关类为final,无法重写。
内容的提问来源于stack exchange,提问作者stojelenov
相关产品推荐
相关产品推荐

