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 :

Changer la taille d'une Progressbar


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut Changer la taille d'une Progressbar
    Bonjour,

    Je souhaiterais me développer un classe composite qui affiche un bouton pour lancer une tache, puis que le bouton se remplace par une barre de progression pendant la tache en cour, pour au final redevenir un bouton.

    Actuellement, j'ai deux soucis. Comment fait ton pour inverser les composants en live ?
    En swing, la chose était simple. En le supprimant du contener parent et en ajoutant le nouveau.

    Le deuxième soucis, est que la progressbar ne veux pas changer de taille !!
    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
    public class CompositeButtonState extends Composite{
     
    	private Button			buttonState = null;
    	private ProgressBar		progressState = null;
     
    	private int				state = -1;
     
    	public CompositeButtonState(Composite parent, int style) {
    		super(parent, style);
     
    		GridLayout grid = new GridLayout();
    		grid.numColumns = 1;
    		this.setLayout(grid);
    		this.setBackground(new Color(null, 0, 255, 255));
     
    		buttonState = new Button(this, SWT.PUSH);
    		buttonState.setSize(50, 50);
     
    		progressState = new ProgressBar(this, SWT.SMOOTH);
    		progressState.setMaximum(0);
    		progressState.setMaximum(100);
    		progressState.setSize(50, 50);
     
    		this.setState(0, 0);
    	}
     
    	public void addSelectionListener(SelectionListener listener){
    		buttonState.addSelectionListener(listener);
    	}
     
    	public int getState() {
    		return state;
    	}
     
    	public void setState(int state, int progress){
    		if(this.state != state){
    			switch(state){
    			case 0 : //wait start
    				buttonState.setImage(Activator.getDefault().getImageRegistry().get(Activator.ICON_WAIT_START));
    				buttonState.setText("");
    				buttonState.setVisible(true);
    				buttonState.setSize(50,50);
    				progressState.setVisible(false);
    				this.layout();
    				break;
    			case 1 : // progress
    				buttonState.setVisible(false);
    				progressState.setVisible(true);
    				progressState.setSize(50,50);
    				this.layout();
    				break;
    			case 2 : // abort
    				break;
    			case 3 : // finished
    				buttonState.setImage(Activator.getDefault().getImageRegistry().get(Activator.ICON_FINISHED));
    				buttonState.setVisible(true);
    				progressState.setVisible(false);
    				break;
    			}
    			this.state = state;
    		}
     
    		if(this.state == 1){
    			progressState.setSelection(progress);
    		}
    	}
    }


    merci d'avance.
    Croc

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    A priori, 2 possibilités :
    - Création / suppression à la volée du bouton et de la progress bar en fonction des besoins. La méthode dispose() permet de supprimer un composant.
    - Créer le bouton et la progress bar et les rendre visible / invisible en fonction du besoin.

    Il faudra également faire un pack() à chaque fois pour forcer le composite parent à recomposer son layout.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    Bonjour et merci pour la réponse.

    Actuellement, j'utilise le setVisible. Mais cela les laisse la ou ils ont été ancrer. Je n'utilise peut être pas le bon layout.

    J'utilise un GridLayout de 1 colonne.

    Je ne connait pas encore très bien les propriété des layouts swt.

    Je vais essayé avec un autre layout.
    Sinon, je tenterais la version création-suppression qui ne me plait gère.

    Merci.

  4. #4
    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 : 39
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Pour ton problème d'ancrage dans le layout, sache que tu peux gérer les composants invisible dans un GridLayout. Jette un œil sur ce snippet, exécute le et tu auras la solution ^^

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    La solution marche très bien.
    Merci.

    Toutefois, le fait que la progressBar ne s'adapte pas rend la chose beaucoup mois ... pratique.

    Que faire ?

    Si toutefois le progressbar ne veux pas m'aider, je peux peut être définir un rectangle sur mon bouton ??!!
    Une sorte d'icône dynamique.


    Ou alors, j'utilise un composant swing.
    Étendre un bouton en swing est une vrai bonheur. Mais mélanger les deux m'emballe pas des masses.

    Résultat actuel a gauche.
    Edit : petit exemple de ce que je veux a droite (fait en swing en 40 minutes :s)
    Images attachées Images attachées   

  6. #6
    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 : 39
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Citation Envoyé par croc14
    Toutefois, le fait que la progressBar ne s'adapte pas rend la chose beaucoup mois ... pratique.
    Qu'entends-tu par là? C'est le fait que la ProgressBar ne prenne pas les mêmes "dimensions" que le bouton qui te gène?
    Si c'est juste ça, sache que tu peux donner une taille minimale à ta ProgressBar grâce à un GridData.
    Si c'est le bon "problème", sache que tu peux le résoudre facilement ^^

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    Oki, je teste ce soir.

    Mais normalement, le GridData est bien positionné comme pour le bouton. Ils ont la même constitution.
    Un "GridData.FILL_BOTH"

  8. #8
    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 : 39
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Sache que ses styles ne sont pas recommandés (cf javadoc de la classe GridData). Mais là n'est pas le problème... C'est peut-être dû au conteneur du Composite parent. À voir de ce côté là...
    Le mieux serait que tu postes le code qui affiche la partie en question.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    C'est bien ce que je comptais faire. Je pense que j'ai du me faire duper par mon icone qui a une grosse taille, mais le bouton ne remplie peut etre pas non plus la totalité de sa zone.

    Pour le fill_both, il faut affecter pour horizontal et vertical séparément ?

  10. #10
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    La Javadoc parle d'elle même (en anglais certes ) :

    Style bit for new GridData(int) to resize the control to fill the cell horizontally and vertically and to fit the remaining horizontal and vertical space. FILL_BOTH = FILL_VERTICAL | FILL_HORIZONTAL Not recommended. Use new GridData(SWT.FILL, SWT.FILL, true, true) instead.
    Après j'aurais aimer trouver plus d'explications sur le pk du comment mais bon...

    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    Effectivement cela venait des paramètre manquant. Mais pas des "alignements".
    Il manquait les "grab exess space".
    La ca marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		progressStateGriddata = new GridData();
    		progressStateGriddata.exclude = false;
    		progressStateGriddata.horizontalSpan = 2;
    		progressStateGriddata.horizontalAlignment = SWT.FILL;
    		progressStateGriddata.verticalAlignment = SWT.FILL;
    		progressState.setLayoutData(progressStateGriddata);
    La ca marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		progressStateGriddata = new GridData();
    		progressStateGriddata.exclude = false;
    		progressStateGriddata.horizontalSpan = 2;
    		progressStateGriddata.horizontalAlignment = SWT.FILL;
    		progressStateGriddata.verticalAlignment = SWT.FILL;
    		progressStateGriddata.grabExcessHorizontalSpace = true;
    		progressStateGriddata.grabExcessVerticalSpace = true;
    Et du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new GridData(SWT.FILL, SWT.FILL, true, true)
    est plus que nécessaire.

    Très pointilleux les GridLayout !!

    Encore merci a vous ^^
    @+
    Images attachées Images attachées  

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

Discussions similaires

  1. Changer la taille d'une image chargée avec Loader
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 29/01/2008, 17h55
  2. Comment changer la taille d'une partition ?
    Par sami_c dans le forum Debian
    Réponses: 1
    Dernier message: 07/06/2007, 19h45
  3. changer la taille d'une plage après l'avoir nommer
    Par b.amine dans le forum Excel
    Réponses: 1
    Dernier message: 12/04/2007, 15h39
  4. comment changer la taille d'une fenetre html
    Par coelho dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2006, 12h48
  5. Changer la taille d'une police SDL_ttf.
    Par Kerwando dans le forum SDL
    Réponses: 4
    Dernier message: 06/06/2006, 12h10

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