如何在 SWT table 中保留一个额外的空行?
How can I keep an extra empty row in a SWT table?
如何在不在模型中添加虚拟值的情况下在 SWT table 中保留一个额外的空行?我想始终显示一个空行以便在最后一行周围绘制一个矩形?有什么线索吗?
场景:table 大小将被修复。如果我有 5 个项目,那么我希望第六行为空,以便我可以绘制。如果我有 100 行,那么我想要第 101 个位置的空行,并且 table 应该在某个事件上滚动并显示绘制的矩形。
希望尽快看到答案。
最后,我能够在 table 中添加一个空行,而无需在内容提供程序中添加虚拟值。这是我所做的:
我扩展了 JFace TableViewer class 并覆盖了 refresh()、refresh(Object element) 和 inputChanged(Object input, Object oldInput) 方法。基本上在所有这三种方法中,如果有空项目,我首先删除空项目,然后让原始 jface 方法调用发生,然后我再次添加新的空项目 table。
下面是对我有用的代码。
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);
}
}
}
谢谢...
阿米特·库马尔
如何在不在模型中添加虚拟值的情况下在 SWT table 中保留一个额外的空行?我想始终显示一个空行以便在最后一行周围绘制一个矩形?有什么线索吗?
场景:table 大小将被修复。如果我有 5 个项目,那么我希望第六行为空,以便我可以绘制。如果我有 100 行,那么我想要第 101 个位置的空行,并且 table 应该在某个事件上滚动并显示绘制的矩形。
希望尽快看到答案。
最后,我能够在 table 中添加一个空行,而无需在内容提供程序中添加虚拟值。这是我所做的: 我扩展了 JFace TableViewer class 并覆盖了 refresh()、refresh(Object element) 和 inputChanged(Object input, Object oldInput) 方法。基本上在所有这三种方法中,如果有空项目,我首先删除空项目,然后让原始 jface 方法调用发生,然后我再次添加新的空项目 table。
下面是对我有用的代码。
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);
}
}
}
谢谢... 阿米特·库马尔