|
||
![]() |
|
![]() |
|
Table of Contents
Checkboxes dans une table SWTComment mettre des checkboxes dans une table SWT ? Plusieurs solutions se présentent... En standardLa table SWT n’accepte les checkboxes que dans sa première colonne. Pour activer ce comportement, on utilise le style SWT.CHECK. new Table(parent, SWT.CHECK); Cette checkbox a cependant un comportement particulier et l’action de la cocher n’est qu’une alternative à la sélection de ligne. En conséquence, c’est un SelectionListener qui pourra intercepter les changements d’état : table.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.detail == SWT.CHECK) { ... } } }); En résumé, cette façon de procéder est assez simple à mettre en oeuvre mais ne permet pas d’avoir des cases à cocher dans plusieurs colonnes distinctes qui, par exemple, correspondraient à des booléens sur des beans. Avec JFaceOn peut simuler la présence de checkboxes dans un TableViewer. Pour cela, on implémente ICellModifier (voir cet article sur l'utilisation de TableViewer) et on fera en sorte que le LabelProvider retourne une image qui corresponde selon les cas à la case cochée ou décochée. Cette approche comporte quelques limitations :
TableEditorUtiliser TableEditor permet d’ajouter une véritable checkbox (bouton de style check) aux cellules de son choix. TableEditor editor = new TableEditor(table); editor.grabVertical = false; editor.minimumHeight = 18; Button button = new Button(table, SWT.CHECK); button.pack(); editor.horizontalAlignment = SWT.CENTER; editor.minimumWidth = button.getSize().x; editor.setEditor(button, item, colIndex); où item est le TableItem qui correspond à la ligne et colIndex est l’indice de la colonne. Pour traiter les changements d’état : button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button checkBox = (Button) e.getSource(); boolean selected = checkBox.getSelection(); ... } }); On peut procéder de la même manière pour mettre en oeuvre des boutons radio. |
||