IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

CheckBox avec Table


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Par défaut CheckBox avec Table
    Salut à tous,
    J'ai créé une checkbox avec la fonction Table du meme genre que celle ci:

    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
    Table table = new Table(shell, SWT.CHECK);
    table.setSize(204,106);
    TableColumn colonne1 = new TableColumn(table, SWT.LEFT);
    colonne1.setText("Colonne 1");
    colonne1.setWidth(100);
    TableColumn colonne2 = new TableColumn(table, SWT.LEFT);
    colonne2.setText("Colonne 2");
    colonne2.setWidth(100);
    table.setHeaderVisible(true);
    table.setLinesVisible(true); 
    TableItem ligne1 = new TableItem(table,SWT.NONE);
    ligne1.setText(new String[] {"valeur 1 1","valeur 1 2"});
    TableItem ligne2 = new TableItem(table,SWT.NONE);
    ligne2.setText(new String[] {"valeur 1 1","valeur 1 2"});
    TableItem ligne3 = new TableItem(table,SWT.NONE);
    ligne3.setText(new String[] {"valeur 1 1","valeur 1 2"});
    TableItem ligne4 = new TableItem(table,SWT.NONE);
    ligne4.setText(new String[] {"valeur 1 1","valeur 1 2"});
    Le probleme c'est que je ne peux pas faire des opérations comme ligne1.setEnabled par exemple.

    Je cherche à savoir comment gérer ce type de checkbox:
    Comment cocher et décocher une case?
    Comment mettre en place une action en cas de cochage/décochage?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Alors, il existe bien une solution en SWT pour effectuer une action au clic sur la Checkbox. Il te suffit de rajouter un écouteur sur la sélection dans ta table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    table.addSelectionListener(new SelectionAdapter() {
    	@Override
    	public void widgetSelected(SelectionEvent e) {
    		if (e.detail == SWT.CHECK) {
    			System.out.println("Checked, state: " + ((TableItem) e.item).getChecked());
    		}
    	}
    });
    Mais je trouve ça extrêmement pénible.
    Selon moi, il vaut mieux que tu passes par JFace et une CheckboxTableViewer qui te donne l'avantage d'utiliser tes objets métier directement plutôt que d'avoir à passer par une API plus bas niveau (TableItem).
    Un exemple d'implémentation (qui liste les fichiers sur C: ) qui fait ce que tu souhaites:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public static void main(String[] args) {
    	Display display = new Display();
    	Shell shell = new Shell(display);
    	shell.setLayout(new GridLayout(1, false));
     
    	// Create the CheckboxTableViewer to display the files in the source dir
    	Composite tableComposite = new Composite(shell, SWT.None);
    	tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
    			true));
    	TableColumnLayout layout = new TableColumnLayout();
    	tableComposite.setLayout(layout);
    	final CheckboxTableViewer ctv = CheckboxTableViewer.newCheckList(
    			tableComposite, SWT.BORDER);
    	ctv.getTable().setHeaderVisible(true);
    	ctv.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
    	ctv.setContentProvider(new ArrayContentProvider());
    	ctv.addCheckStateListener(new ICheckStateListener() {
     
    		@Override
    		public void checkStateChanged(CheckStateChangedEvent event) {
    			System.out.println(event.getElement() + ", state: "
    					+ event.getChecked());
    		}
    	});
     
    	TableViewerColumn fileColumn = new TableViewerColumn(ctv, SWT.LEFT);
    	fileColumn.getColumn().setText("File Name");
    	layout.setColumnData(fileColumn.getColumn(), new ColumnWeightData(2));
    	fileColumn.setLabelProvider(new ColumnLabelProvider() {
    		@Override
    		public String getText(Object element) {
    			return ((File) element).getName();
    		}
    	});
     
    	TableViewerColumn sizeColumn = new TableViewerColumn(ctv, SWT.LEFT);
    	sizeColumn.getColumn().setText("File Size");
    	layout.setColumnData(sizeColumn.getColumn(), new ColumnWeightData(1));
    	sizeColumn.setLabelProvider(new ColumnLabelProvider() {
    		@Override
    		public String getText(Object element) {
    			return Long.toString(((File) element).length());
    		}
    	});
    	File file = new File("C:/");
    	ctv.setInput(file.listFiles(new FileFilter() {
    		public boolean accept(File pathName) {
    			// Ignore directories; return only files
    			return pathName.isFile();
    		}
    	}));
     
    	shell.setSize(250, 200);
    	shell.setText("File test");
    	shell.open();
    	while (!shell.isDisposed()) {
    		if (!display.readAndDispatch())
    			display.sleep();
    	}
    	display.dispose();
    }
    Voilà, à+
    Gueritarish

    P.S.: Tu as un article de Mickaël sur les viewers JFace.

Discussions similaires

  1. checked d'un checkbox avec nom dynamique
    Par Sylvain245 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/11/2005, 11h28
  2. Réponses: 3
    Dernier message: 11/01/2005, 08h20
  3. [Sybase] Pb avec tables proxy
    Par vince120 dans le forum Sybase
    Réponses: 4
    Dernier message: 10/12/2004, 14h11
  4. [struts] mémorisation d'une checkbox avec cookie
    Par rocco dans le forum Struts 1
    Réponses: 3
    Dernier message: 22/04/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo