如何使用对表格查看器的操作指向新添加的元素?
How to point to newly added element using an action to a tableviewer?
Action add = new Action("Add Values") {
@Override
public void run() {
Bike bike = new Bike();
bike.setName("BMW");
tableViewer.refresh();
}
};
我有一个 table 查看器并在列中显示自行车名称。如果我使用操作添加新元素,我会将我的选择添加到最顶部的元素而不是新添加的元素。我怎样才能做到这一点。
我的 setinput 中有一个列表调用 treeviewercontentprovider
private static class TreeContentProvider implements ITreeContentProvider {
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Object[]) {
return (Object[]) parentElement;
}
if (parentElement instanceof Collection) {
return ((Collection) parentElement).toArray();
}
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
}
您必须将新对象添加到您的数据模型中 - 即您的内容提供商 returns 的数据。您当前的内容提供者似乎只是从输入数组或列表中获取数据 - 在这种情况下,您将不得不更新 array/list 并再次调用 setInput
。注意:使用具有 table.
的树内容提供程序没有意义
更新模型后,您可以调用 table 查看器 refresh
方法,或者您的内容提供商可以使用 add(Object)
方法将新对象告知查看器。
我使用添加到操作中的代码实现了要求。 setselection to the new element 指向添加到table后新添加的元素。
Action add = new Action("Add Values") {
@Override
public void run() {
Bike bike = new Bike();
bike.setName("BMW");
tableViewer.refresh();
tableViewer.setSelection(new StructuredSelection(bike));
}
};
Action add = new Action("Add Values") {
@Override
public void run() {
Bike bike = new Bike();
bike.setName("BMW");
tableViewer.refresh();
}
};
我有一个 table 查看器并在列中显示自行车名称。如果我使用操作添加新元素,我会将我的选择添加到最顶部的元素而不是新添加的元素。我怎样才能做到这一点。
我的 setinput 中有一个列表调用 treeviewercontentprovider
private static class TreeContentProvider implements ITreeContentProvider {
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Object[]) {
return (Object[]) parentElement;
}
if (parentElement instanceof Collection) {
return ((Collection) parentElement).toArray();
}
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
}
您必须将新对象添加到您的数据模型中 - 即您的内容提供商 returns 的数据。您当前的内容提供者似乎只是从输入数组或列表中获取数据 - 在这种情况下,您将不得不更新 array/list 并再次调用 setInput
。注意:使用具有 table.
更新模型后,您可以调用 table 查看器 refresh
方法,或者您的内容提供商可以使用 add(Object)
方法将新对象告知查看器。
我使用添加到操作中的代码实现了要求。 setselection to the new element 指向添加到table后新添加的元素。
Action add = new Action("Add Values") {
@Override
public void run() {
Bike bike = new Bike();
bike.setName("BMW");
tableViewer.refresh();
tableViewer.setSelection(new StructuredSelection(bike));
}
};