2017-03-13 2 views
0

J'ai créé une visionneuse de table comportant deux colonnes. Le premier nom de colonne est "Fristname" et le second nom de colonne "lastname". J'ai ajouté le support de l'éditeur aux deux colonnes mais je n'ai pu modifier/sélectionner que dans la première colonne. Dans ma deuxième colonne pas en mesure de faire l'édition/sélection. Je ne sais pas pourquoi quelqu'un m'aider s'il vous plaît? Voici l'extrait de code.Problème d'édition dans Tableviewer

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 

    } 

} 

Ci-dessous EditColumn Code classe

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

    } 
} 
+0

Qu'est-ce que 'EditColumn'? Comment ça traite la méthode 'canEdit'? –

+0

@ greg-449 personnalisé Editorsupport classe que j'ai créé en étendant EditingSupport – Chinna

+0

@ greg-449 j'ai changé la méthode canEdit pour retourner vrai toujours – Chinna

Répondre

0

Votre EditColumn classe utilise toujours les méthodes getFirstName et setFirstName de Person si bien que vous pouvez éditer la dernière colonne de nom que vous n'utilisez pas les valeurs correctes.

Vous devez utiliser différentes classes EditingSupport pour chaque colonne.

+0

Je l'ai essayé encore la deuxième colonne est non modifiable. Non seulement je ne suis même pas capable de sélectionner la cellule. dans le cas de la première colonne, même si je ne suis pas en train d'ajouter un support d'édition, je suis en mesure de sélectionner la cellule, mais dans le cas où la deuxième colonne je ne suis pas en mesure de sélectionner la cellule. – Chinna

+0

J'ai testé votre code et ça marche très bien avec le support d'édition décommenté (macOS). Je ne sais rien d'autre à suggérer. –

+0

Merci beaucoup pour votre temps. – Chinna