Eclipse plugin 在Tableviewer中编辑时遇到的问题

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

我创建了一个包含两列的表查看器。第一列名为“Fristname”,第二列名为“lastname”。我为这两列添加了编辑器支持,但我只能在第一列中进行编辑/选择。在我的第二列中,无法进行编辑/选择。不知道为什么有人来帮我?下面是代码片段

   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);

    }
}