Eclipse plugin 在Tableviewer中编辑时遇到的问题
我创建了一个包含两列的表查看器。第一列名为“Fristname”,第二列名为“lastname”。我为这两列添加了编辑器支持,但我只能在第一列中进行编辑/选择。在我的第二列中,无法进行编辑/选择。不知道为什么有人来帮我?下面是代码片段Eclipse plugin 在Tableviewer中编辑时遇到的问题,eclipse-plugin,swt,eclipse-rcp,jface,Eclipse Plugin,Swt,Eclipse Rcp,Jface,我创建了一个包含两列的表查看器。第一列名为“Fristname”,第二列名为“lastname”。我为这两列添加了编辑器支持,但我只能在第一列中进行编辑/选择。在我的第二列中,无法进行编辑/选择。不知道为什么有人来帮我?下面是代码片段 public class ViewPart1 extends ViewPart { public ViewPart1() { // TODO Auto-generated constructor stub } pr
public class ViewPart1 extends ViewPart {
public ViewPart1() {
// TODO Auto-generated constructor stub
}
private ResourceManager resourceManager = new LocalResourceManager(
JFaceResources.getResources());
@Override
public void createPartControl(Composite parent) {
// re-use an existing image
final Image image = FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
.getImage();
TableViewer tblView = new TableViewer(parent);
final Table table = tblView.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableViewerColumn fn = new TableViewerColumn(tblView, SWT.BORDER, 0);
fn.getColumn().setWidth(150);
fn.getColumn().setText("Firstname");
fn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Person p = (Person) element;
return p.getFirstName();
}
@Override
public Image getImage(Object element) {
return image;
}
});
// fn.setEditingSupport(new EditColumn(tblView));
fn = new TableViewerColumn(tblView, SWT.BORDER, 1);
fn.getColumn().setWidth(150);
fn.getColumn().setText("Last name");
fn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Person p = (Person) element;
return p.getLastNAme();
}
@Override
public Image getImage(Object element) {
return image;
}
});
// fn.setEditingSupport(new EditColumn(tblView));
tblView.setContentProvider(new QContentProvider());
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person("a", "b"));
list.add(new Person("C", "D"));
tblView.setInput(list);
tblView.refresh();
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
}
您的
EditColumn
类始终使用Person
的getFirstName
和setFirstName
方法,因此,尽管您可以编辑姓氏列,但未使用正确的值
您需要为每个列使用不同的
EditingSupport
类。什么是EditColumn
?它如何处理canEdit
方法?@greg-449,这是我通过扩展创建的自定义编辑器支持类EditingSupport@greg-449我将canEdit方法更改为返回truealways@greg-449我已经升级了EditColumn类代码,在这里我没有看到任何明显的错误。您还没有向我们展示完整的表设置-如何设置内容提供程序和输入?您可能在表设置的其他地方出错。我尝试过,但第二列不可编辑。不仅如此,我甚至无法选择单元格。在第一列的情况下,即使我没有添加任何编辑支持,我也可以选择单元格,但在第二列的情况下,我无法选择单元格。我测试了您的代码,在未注释编辑支持(macOS)的情况下,我的代码运行良好。我不知道还有什么好建议的。非常感谢你抽出时间。
public class EditColumn extends EditingSupport {
private final TableViewer viewer;
private final CellEditor editor;
public EditColumn(TableViewer viewer) {
super(viewer);
this.viewer = viewer;
this.editor = new TextCellEditor(viewer.getTable());
}
@Override
protected boolean canEdit(Object element) {
System.out.println("can edit");
return true;
}
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
@Override
protected Object getValue(Object element) {
// TODO Auto-generated method stub
return ((Person) element).getFirstName();
}
@Override
protected void setValue(Object element, Object value) {
((Person) element).setFirstName(String.valueOf(value));
viewer.update(element, null);
}
}