swt tableviewer通过列的值筛选行,将选中的行高亮
时间: 2024-02-24 22:58:24 浏览: 91
要高亮显示选中的行,您可以在 `addSelectionChangedListener()` 方法中添加自定义的选择更改侦听器,并在其中使用 `StyledCellLabelProvider` 类来自定义行的样式。以下是一个示例:
```java
tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
// 保存当前选中行的状态
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
tableViewer.setSelection(selection);
// 自定义选中行的样式
tableViewer.setLabelProvider(new StyledCellLabelProvider() {
@Override
public void update(ViewerCell cell) {
Object element = cell.getElement();
String searchText = "John";
if (((Person) element).getName().contains(searchText)) {
cell.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
cell.setFont(JFaceResources.getFont(JFaceResources.DEFAULT_FONT));
} else {
cell.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_FOREGROUND));
cell.setFont(JFaceResources.getFont(JFaceResources.DEFAULT_FONT));
}
}
});
}
});
```
在上面的示例中,我们在选择更改侦听器中使用 `StyledCellLabelProvider` 类来自定义选中行的样式。我们使用 `update()` 方法来更新每个单元格的样式。如果当前行包含筛选文本 `John`,则将其前景色设置为红色,并使用默认字体;否则使用默认前景色和字体。这样,选中的行就会高亮显示,并且匹配筛选条件的行也会相应地高亮显示。
阅读全文