如何在SWT表中保留一个额外的空行?

时间:2015-06-18 13:58:49

标签: swt tableviewer

如何在SWT表中保留额外的空行而不在模型中添加虚拟值?我想显示一个空行总是为了在最后一行周围绘制一个矩形?任何线索?

场景:表格大小将被修复。如果我有5个项目,那么我希望第六行为空,我可以绘制。如果我有100行,那么我希望第101个位置的空行,并且表格应滚动某个事件并显示绘制的矩形。

希望很快能找到答案。

1 个答案:

答案 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);
        }
    }

}

...谢谢 阿米特库马尔