如何在SWT表中保留额外的空行而不在模型中添加虚拟值?我想显示一个空行总是为了在最后一行周围绘制一个矩形?任何线索?
场景:表格大小将被修复。如果我有5个项目,那么我希望第六行为空,我可以绘制。如果我有100行,那么我希望第101个位置的空行,并且表格应滚动某个事件并显示绘制的矩形。
希望很快能找到答案。
答案 0 :(得分:0)
最后,我能够在表中添加一个空行而不在内容提供程序中添加虚拟值。这是我做的: 我扩展了JFace TableViewer类并覆盖了refresh(),refresh(Object element)和inputChanged(Object input,Object oldInput)方法。基本上在所有这三种方法中我首先删除空项如果有,然后让原始的jface方法调用发生,然后我再次添加新的空表项。
以下代码对我有用。
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
/**
* @author amitkumar
*/
public class ExtraEmptyRowTableViewer extends TableViewer {
boolean addExtraRow = false;
public ExtraEmptyRowTableViewer(Composite parent) {
super(parent);
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (workbenchWindow != null
&& workbenchWindow.getActivePage() != null
&& workbenchWindow.getActivePage().getActiveEditor() != null
&& workbenchWindow.getActivePage().getActiveEditor().getClass().getName().equals(
"org.eclipse.compare.internal.CompareEditor")) {
addExtraRow = true;
}
}
public ExtraEmptyRowTableViewer(Composite composite, int style) {
super(composite, style);
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (workbenchWindow != null
&& workbenchWindow.getActivePage() != null
&& workbenchWindow.getActivePage().getActiveEditor() != null
&& workbenchWindow.getActivePage().getActiveEditor().getClass().getName().equals(
"org.eclipse.compare.internal.CompareEditor")) {
addExtraRow = true;
}
}
@Override
public void refresh(Object element) {
if (!addExtraRow) {
super.refresh(element);
} else {
removeEmptyRow();
super.refresh(element);
}
}
@Override
protected void inputChanged(Object input, Object oldInput) {
if (!addExtraRow) {
super.inputChanged(input, oldInput);
} else {
removeEmptyRow();
super.inputChanged(input, oldInput);
@SuppressWarnings("unused")
TableItem tableItem = new TableItem(getTable(), SWT.NO_BACKGROUND | SWT.NO_FOCUS);
}
}
public void removeEmptyRow() {
try {
for (TableItem tableItem : getTable().getItems()) {
if (tableItem == null || tableItem.getText() == null
|| "".equals(tableItem.getText())) {
tableItem.dispose();
}
}
} catch (Exception e) {
}
}
@Override
public void refresh() {
if (!addExtraRow) {
super.refresh();
} else {
removeEmptyRow();
super.refresh();
@SuppressWarnings("unused")
TableItem tableItem = new TableItem(getTable(), SWT.NO_BACKGROUND | SWT.NO_FOCUS);
}
}
}
...谢谢 阿米特库马尔