Bonjour,
Je suis en train de developper une application en SWT utilisant une TableViewer contenant une Table.
Mon probleme est que la modification d'une cellule se fait avec un seul clic , ce qui veut dire juste quand on la selectionne.
Ce que je voudrais, c'est selectionner la ligne du tableau, et si je fais un double clic dans la cellule, pouvoir la modifier.
Voici mon code actuel :
Je ne mets pas ici le ContentProvider ni le LabelProvider qui ne sont pas utiles (enfin j'espere).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 TableViewer tableViewer = new TableViewer(tableComposite, SWT.FULL_SELECTION | SWT.BORDER | SWT.HIDE_SELECTION); tableViewer.setContentProvider(new EmailContentProvider()); tableViewer.setLabelProvider(new EmailLabelProvider()); tableViewer.setInput(emailList); Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); ... Ajout des TableColumn ... CellEditor[] editors = new CellEditor[5]; editors[0] = new TextCellEditor(); editors[1] = new TextCellEditor(table); editors[2] = new TextCellEditor(table); editors[3] = new TextCellEditor(table); editors[4] = new ComboBoxCellEditor(table, getEmailActions(),SWT.READ_ONLY); tableViewer.setColumnProperties(PROPS); tableViewer.setCellEditors(editors); tableViewer.setCellModifier(new EmailCellModifier(tableViewer));
Par contre, le cellModifier:
Je pense que la methode canModify() peut etre interessante car quand je retourne False, il n'y a que la selection de la ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 class EmailCellModifier implements ICellModifier { private Viewer viewer; public EmailCellModifier(Viewer viewer) { this.viewer = viewer; } public boolean canModify(Object element, String property) { return true; } public Object getValue(Object element, String property) { Email email = (Email) element; if (Constants.EMAIL_ACCOUNT_NAME.equals(property)) { return email.getAccountName(); ... } public void modify(Object element, String property, Object value) { if (element instanceof Item) { element = ((Item) element).getData(); } Email email = (Email) element; if (Constants.EMAIL_ACCOUNT_NAME.equals(property)) { email.setAccountName((String) value); ... viewer.refresh(); } }
En fait, je me demande si mon probleme ne pourait pas etre resolu si je pouvais savoir quand un simple ou double clic a ete fait dans la cellule.
Merci d'avance.
Partager