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 :

[SWT] Placement des éléments et mise à jour de texte boguant


Sujet :

SWT/JFace Java

  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut [SWT] Placement des éléments et mise à jour de texte boguant
    Bonjour à toutes et à tous,

    Je ne suis pas très à l’aise avec SWT c'est pour cela que je vous demande votre aide.

    Mon interface graphique est simple voici mon code:
    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
    92
    93
     
    		final Display display = new Display ();
    		final Shell shell = new Shell (display);
    		shell.setText ("Interface");
     
    		GridLayout gridLayout = new GridLayout (4, false);
    		gridLayout.verticalSpacing = 8;
     
    		shell.setLayout (gridLayout);
     
    		Button source = new Button (shell, SWT.NULL);
    		source.setText ("Source...");
    		GridData gridData = new GridData ();
    		gridData.horizontalSpan = 1;
    		gridData.verticalSpan = 2;
    		gridData.heightHint = 50;
    		gridData.widthHint = 100;
    		source.setLayoutData (gridData);
     
    		Label sourceLabel = new Label (shell, SWT.NULL);
    		sourceLabel.setText ("Dossier source : ");
    		gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL);
    		sourceLabel.setLayoutData (gridData);
     
    		final Label sourceResLabel = new Label (shell, SWT.NULL);
    		sourceResLabel.setText (directoryToScan);
    		gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL);
    		gridData.horizontalSpan = 2;
    		sourceResLabel.setLayoutData (gridData);
     
    		source.addSelectionListener (new SelectionAdapter ()
    		{
    			public void widgetSelected (SelectionEvent e)
    			{
    				DirectoryDialog dialog = new DirectoryDialog (shell, SWT.OPEN);
    				String file = dialog.open ();
    				if (file != null)
    				{
    					sourceResLabel.setText (file);
    					directoryToScan = file;
    				}
    			}
    		});
     
    		Label destLabel = new Label (shell, SWT.NULL);
    		destLabel.setText ("Dossier destination : ");
    		gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL);
    		destLabel.setLayoutData (gridData);
     
    		Label destResLabel = new Label (shell, SWT.NULL);
    		destResLabel.setText (directoryToParse);
    		gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL);
    		gridData.horizontalSpan = 2;
    		destResLabel.setLayoutData (gridData);
     
    		final Button generate = new Button (shell, SWT.PUSH);
    		generate.setText ("Générer");
    		gridData = new GridData ();
    		gridData.heightHint = 30;
    		gridData.widthHint = 100;
    		gridData.horizontalSpan = 3;
    		gridData.horizontalAlignment = GridData.CENTER;
    		generate.setLayoutData (gridData);
     
    		generate.addSelectionListener (new SelectionAdapter ()
    		{
    			public void widgetSelected (SelectionEvent e)
    			{
    				generate ();
    				generate.setEnabled (true);
    			}
    		});
     
    		log = new Text (shell, SWT.WRAP | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL
    				| SWT.V_SCROLL | SWT.READ_ONLY);
    		gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL
    				| GridData.VERTICAL_ALIGN_FILL);
    		gridData.horizontalSpan = 4;
    		gridData.grabExcessVerticalSpace = true;
    		gridData.horizontalAlignment = GridData.FILL;
    		log.setLayoutData (gridData);
     
    		shell.setSize (450, 400);
    		shell.open ();
     
    		while (!shell.isDisposed ())
    		{
    			if (!display.readAndDispatch ())
    			{
    				display.sleep ();
    			}
    		}
    		display.dispose ();
    Ce code est censé me générer la vue en pièce jointe (illustration.png).
    Cependant, j'obtient la vue illustrée par la deuxième pièce jointe (illustration2.png).

    Deux remarques:
    _ Mes éléments ne prennent pas l'ensemble de ma fenêtre
    _ Les deux libellés indiquant des chemins sont tronqués alors qu'il reste beaucoup de place sur la droite.

    Je n'arrive pas à corriger ces deux bogues. Auriez vous une solution?

    Deuxième chose, lorsque j'appuie sur générer, ceci execute un programme assez long ce qui fait que ma fenêtre est bloqué (ne répond pas). La solution est de mettre un Thread mais ceci ne fonctionne pas bien.

    Le plus génant est que j'aimerai afficher des chose dans mon Log au fur et à mesure que mon programme s'execute donc j'ecris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    log.setText ("Log...");
    log.setText (log.getText () + "Traitement des fichiers...");
    Cependant, rien ne s'affiche même avec le thread! Seriez vous pourquoi? Peut être que si le programme est trop chargé il n'arrive pas à gérer!


    Merci d'avance pour votre aide précieuse
    Images attachées Images attachées   

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

    Tout d'abord, sache que les données de positionnement statiques ne sont pas recommandées (pour le coup, ici, c'est ce qui t'empêche d'avoir le comportement attendu). Donc, évite les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GridData.HORIZONTAL_ALIGN_FILL
    // A remplacer par:
    new GridData(SWT.FILL, SWT.TOP, true, false);
    Ensuite, ta solution de mettre un thread en place est bonne, mais il faut savoir où l'exécuter. Les mises à jour de l'interface graphique doivent se faire dans le thread IHM mais seulement les mises à jour pas les traitements longs.
    Pour lancer une mise à jour dans le thread IHM, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    display.asynchExec(new Runnable() {
     
        public void run() {
            log.setText ("Log...");
            log.setText (log.getText () + "Traitement des fichiers...");
        }
    });
    Pour synthétiser tout ça, le code:
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    	private static String directoryToScan = "long/file/path/that/takes/all/space";
     
    	private static String directoryToParse = "parse/";
     
    	private static Text log;
     
    	public static void main(String[] args)
    	{
    		final Display display = new Display();
    		final Shell shell = new Shell(display);
    		shell.setText("Interface");
     
    		GridLayout gridLayout = new GridLayout(4, false);
    		gridLayout.verticalSpacing = 8;
     
    		shell.setLayout(gridLayout);
     
    		Button source = new Button(shell, SWT.NULL);
    		source.setText("Source...");
    		GridData gridData = new GridData();
    		gridData.horizontalSpan = 1;
    		gridData.verticalSpan = 2;
    		gridData.heightHint = 50;
    		gridData.widthHint = 100;
    		source.setLayoutData(gridData);
     
    		Label sourceLabel = new Label(shell, SWT.NULL);
    		sourceLabel.setText("Dossier source : ");
    		gridData = new GridData(SWT.LEFT, SWT.TOP, false, false);
    		sourceLabel.setLayoutData(gridData);
     
    		final Label sourceResLabel = new Label(shell, SWT.NULL);
    		sourceResLabel.setText(directoryToScan);
    		gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
    		gridData.horizontalSpan = 2;
    		sourceResLabel.setLayoutData(gridData);
     
    		source.addSelectionListener(new SelectionAdapter() {
    			public void widgetSelected(SelectionEvent e)
    			{
    				DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN);
    				String file = dialog.open();
    				if (file != null)
    				{
    					sourceResLabel.setText(file);
    					directoryToScan = file;
    				}
    			}
    		});
     
    		Label destLabel = new Label(shell, SWT.NULL);
    		destLabel.setText("Dossier destination : ");
    		gridData = new GridData(SWT.LEFT, SWT.TOP, false, false);
    		destLabel.setLayoutData(gridData);
     
    		Label destResLabel = new Label(shell, SWT.NULL);
    		destResLabel.setText(directoryToParse);
    		gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
    		gridData.horizontalSpan = 2;
    		destResLabel.setLayoutData(gridData);
     
    		final Button generate = new Button(shell, SWT.PUSH);
    		generate.setText("Générer");
    		gridData = new GridData();
    		gridData.heightHint = 30;
    		gridData.widthHint = 100;
    		gridData.horizontalSpan = 3;
    		gridData.horizontalAlignment = GridData.CENTER;
    		generate.setLayoutData(gridData);
     
    		generate.addSelectionListener(new SelectionAdapter() {
    			public void widgetSelected(SelectionEvent e)
    			{
    				log.setText("Logging...");
    				new Thread(new Runnable() {
    					@Override
    					public void run()
    					{
    						final int[] number = new int[] { 0 };
    						do
    						{
    							try
    							{
    								Thread.sleep(500);
    							} catch (InterruptedException e)
    							{
    								e.printStackTrace();
    							}
    							number[0]++;
    							display.asyncExec(new Runnable() {
    								public void run()
    								{
    									log.setText(log.getText() + "\nLog entry: " + number[0]);
    								}
    							});
    						} while (number[0] < 10);
    					}
    				}).start();
    				generate.setEnabled(true);
    			}
    		});
     
    		log = new Text(shell, SWT.WRAP | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
    		gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1);
    		log.setLayoutData(gridData);
     
    		shell.setSize(450, 400);
    		shell.open();
     
    		while (!shell.isDisposed())
    		{
    			if (!display.readAndDispatch())
    			{
    				display.sleep();
    			}
    		}
    		display.dispose();
    	}
    Voilà, à+
    Gueritarish

  3. #3
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci beaucoup pour ta réponse
    Je vais essayer cela de suite!

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci ceci fonctionne très bien. Juste une remarque: Mon bouton généré n'est pas centré.

    Serais tu pourquoi?

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

    Ton GridData pour le bouton "Générer" a un horizontalSpan à 3 et non à 4.
    Pour le retour à la ligne, j'ai constaté ça aussi. Je sais pas trop à quoi c'est dû...

    Voilà, à+
    Gueritarish

  6. #6
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Pour le retour à la ligne c'est \r\n et non \n.


    Merci à toi pour tout

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

Discussions similaires

  1. Déplacer des Qlabel et mise à jour
    Par rossjojos dans le forum Débuter
    Réponses: 2
    Dernier message: 29/04/2010, 12h29
  2. [AC-2007] Supprimer la demande de confirmation pour des requêtes ajout / mise à jour
    Par cslbcg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/11/2009, 22h38
  3. [MySQL] vérification des variables avant mise à jour
    Par batoule80 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/11/2008, 11h18
  4. Placement des éléments
    Par madislak dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/11/2006, 16h42
  5. [MPD] Créé des tables de mise à jour
    Par Oberown dans le forum Schéma
    Réponses: 9
    Dernier message: 16/01/2005, 13h08

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