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 dans le titre d'un groupe


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 53
    Par défaut CheckBox dans le titre d'un groupe
    Bonjour,
    Je voudrais ajouter une check box dans le titre d'un groupe, afin d'activer ou non les composants du groupe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       _
     -|_| title ----------------------------
    |                                      |
    |                                      |
    |                                      |
    |                                      |
    |                                      |
    |                                      |
    |______________________________________|
    Est possible de faire une telle chose?
    Et si oui, comment?

    merci

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Cette fonction n'est pas fournie par défaut dans SWT...
    Tu peux toujours essayer de positionner un Button au bon endroit via la méthode setBounds(int x, int y, int width, int height) mais je ne sais pas si le résultat peut être satifaisant.

    Edit : Par curiosité j'ai essayé, le résultat est plutôt bon sur Ubuntu, je te poste le bout de code que j'ai utilisé.

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    package org.eclipse.swt.widgets.custom;
     
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.graphics.Rectangle;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Control;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Group;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
     
    public class Main {
     
    	public static void makeWidget(Composite parent) {
    		final Composite container = new Composite(parent, SWT.NONE);
    		final Button button = new Button(container, SWT.CHECK);
    		final Group group = new Group(container, SWT.NONE);
    		final Text text = new Text(group, SWT.MULTI | SWT.BORDER);
    		final GridLayout layout = new GridLayout(1, false);
    		layout.marginTop = 5;
    		text.setLayoutData(new GridData(GridData.FILL_BOTH));
    		group.setLayout(layout);
    		button.moveAbove(group);
    		button.setText("Enable group");
    		button.setSelection(true);
    		button.addListener(SWT.Selection, new Listener() {
     
    			void enableControl(Control control, boolean enabled) {
    				control.setEnabled(enabled);
    				if (control instanceof Composite) {
    					Control[] children = ((Composite) control).getChildren();
    					for (int i = 0; i < children.length; i++) {
    						enableControl(children[i], enabled);
    					}
    				}
    			}
     
    			@Override
    			public void handleEvent(Event event) {
    				enableControl(group, button.getSelection());
    			}
     
    		});
    		container.addListener(SWT.Resize, new Listener() {
     
    			@Override
    			public void handleEvent(Event event) {
    				Rectangle area = container.getClientArea();
    				Point size = button.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    				int x = area.x + 10;
    				int y = area.y;
    				int width = size.x;
    				int height = size.y;
    				group.setBounds(area.x, area.y + size.y / 2, area.width,
    						area.height - size.y / 2);
    				button.setBounds(x, y, width, height);
    			}
     
    		});
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Display display = new Display();
    		Shell shell = new Shell(display, SWT.SHELL_TRIM);
    		FillLayout layout = new FillLayout();
    		layout.marginHeight = 10;
    		layout.marginWidth = 10;
    		makeWidget(shell);
    		shell.setLayout(layout);
    		shell.setBounds(100, 100, 400, 600);
    		shell.open();
    		while (!shell.isDisposed()) {
    			if (!display.readAndDispatch()) {
    				display.sleep();
    			}
    		}
    		display.dispose();
    	}
     
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 53
    Par défaut
    Merci pour ta réponse,

    J'avais déjà essayé un truc similaire (setPosition), et en fait ton code fait parfaitement ce que je veux tel quel, mais ne marche pas au sein de mon programme. Je ne comprend pas pourquoi (pb de layout, de conteneur?)

    voici mon architecture: Eclipse 3.4 > EditorPart > Form > CTabItem > CustomSashForm > ScrolledForm > Section > Composite > Group > contenu du group

    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
    [...]
    final Composite container= [...]// creation du composite
    container.setLayout(new GridLayout());
     
    final Group group= [...]// creation du groupe
    group.setLayoutData(new GridData(GridData.FILL_BOTH));
    group.setLayout(new GridLayout());
     
    button= kit.createButton(container, "Horizontal", SWT.CHECK);
    button.moveAbove(horizontalGroup);
    button.setSelection(true);        
    button.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    boolean isSelected = button.getSelection();
                    group.setEnabled(isSelected);
                }
            });
     
    container.addListener(SWT.Resize, new Listener() {
     
                @Override
                public void handleEvent(Event event) {
                    Rectangle area = container.getClientArea();
                    Point size = button.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                    int x = area.x + 10;
                    int y = area.y + 7;
                    int width = size.x;
                    int height = size.y;
                    group.setBounds(area.x, area.y + size.y / 2, area.width,
                            area.height - size.y / 2);
                    button.setBounds(x, y, width, height);
                }
     
            });

  4. #4
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Moi j'ai créé le bouton avec le Composite que j'ai appelé "container" comme parent (le même que le parent du Group) vérifie que tu as bien fait ça dans ton code (je sais pas d'où il sort ton clientCompo).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 53
    Par défaut
    Pardon, j'avais modifier mon code pour coller au tien, et j'avais pas vu l'appel a cet object aui restait.
    J'ai edrité le code précédent. J'utilisais bien "container".

  6. #6
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Ça vient du fait que tu utilises un GridLayout sur le container, il faut écouter l'événement de redimensionnement et placer les controles "à la main", sinon c'est le gestionnaire de placement qui s'en charge.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 53
    Par défaut
    Ma faute
    Un grand merci, ca marche nickel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] CheckBox dans un header de groupe de DataGrid
    Par Jamming Ed dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 08/08/2012, 14h10
  2. Réponses: 0
    Dernier message: 07/10/2011, 11h08
  3. [AC-2007] Sélection d'une checkbox dans un groupe de controle.
    Par Tifriis dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/10/2010, 13h12
  4. Insérer un CheckBox dans le titre d'un Border
    Par JavaChouke dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 10/12/2008, 08h33
  5. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

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