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] quel Control dans le tableau shell.getChildren()


Sujet :

SWT/JFace Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut [SWT] quel Control dans le tableau shell.getChildren()
    Bonjour,

    Est-ce qu'il y a moyen de savoir à l'avance à quel Control de ma Shell j'ai à faire quand j'utilise getChildren() ou bien dois-je tatonner pour tomber sur le bon en bouclant sur l'indice du tableau en mode debug ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Text text_6 = (Text)display.getActiveShell().getChildren()[9];
    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,

    A priori, c'est toi qui est responsable de la création de ton Shell. Du coup, tu sais ce que tu y as placé et à quel endroit...
    Tu peux donc tout à fait récupérer un Control particulier en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myShell.getChildren()[index];
    Mais plutôt que de faire comme cela (l'indice peut tout à fait varier en fonction des ajustements fait à la fenêtre), je te conseille de passer par un attribut de classe (avec une vérification avant d'accéder à ta variable).

    Voilà, à+
    Gueritarish

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut
    Merci!

    En fait j'ai besoin d'accéder aux Control dans des classes instanciées dans un thread lancé par un Timer depuis le Shell et donc je dois passer le display pour faire des mises-à-jour asynchrones comme par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		display.asyncExec(new Runnable(){
    			public void run(){
    				SWTShellLeBan.refreshConsole(text_6);
    				text_6.append("Connection abort\n");
    			}
    		});
    Comme je passe le display et que je viens de me rendre compte qu'on peut récupérer le Shell dans le display je retire tous les Control que je passais aussi en paramètre. Malheureusement, si je comprends, les Control ne sont pas des attributs de la Shell. J'ai généré le code de la fenêtre avec Eclipse et il met les Control en attributs de la classe principale qui contient la méthode main qui crée le contenu (à moins que ce soit moi qui l'ai fait, je me souviens plus) mais pas comme attributs de la Shell.
    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
     
    package testSWT;
     
    import .....
     
    public class SWTShellLeBan {
    	final Display display = Display.getDefault();
    	protected Shell shlLeban;
    	private Text text_3;
    	private Text text_4;
    	private Text text_5;
    	private Text text_6;
    	private Slider slider_1;
    	private Button btnNewButton;
    	private Button btnNewButton_1;
    	private Button btnClose; 
     
     
    	public Shell getShlLeban() {
    		return shlLeban;
    	}
     
    	public void setShlLeban(Shell shlLeban) {
    		this.shlLeban = shlLeban;
    	}
     
    	.............
    	.............
    	.............
     
    	/**
             * Launch the application.
             * @param args
             */
    	public static void main(String[] args) {
    		try {
    			SWTShellLeBan window = new SWTShellLeBan();
    			window.open();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * Open the window, please!
             */
    	public void open() {
    		//		Display display = Display.getDefault();
    		createContents();
    		shlLeban.open();
    		shlLeban.layout();
    		while (!shlLeban.isDisposed()) {
    			if (!display.readAndDispatch()) {
    				display.sleep();
    			}
    		}
    	}
     
    	/**
             * Create contents of the window.
             */
    	protected void createContents() {
     
    		///////////////////
    		// Whole window  //
    		///////////////////
    		shlLeban = new Shell();
    		shlLeban.setImage(SWTResourceManager.getImage(SWTShellLeBan.class, "/testSWT/images/guillotine.jpg"));
    		shlLeban.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
    		shlLeban.setSize(540, 371);
    		shlLeban.setText("=:  LeBan  :=                                                                                                     cut them out !");
    		shlLeban.setLayout(null);
     
    		///////////
    		// Port  //
    		///////////
    		text_4 = new Text(shlLeban, SWT.NONE);
    		text_4.setForeground(SWTResourceManager.getColor(SWT.COLOR_INFO_BACKGROUND));
    		text_4.setFont(SWTResourceManager.getFont("Georgia", 12, SWT.NORMAL));
    		text_4.setTextLimit(5);
    		text_4.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
    		text_4.setBounds(188, 61, 53, 20);
     
    		/////////
    		// IP  //
    		/////////
    		text_3 = new Text(shlLeban, SWT.NONE);
    		text_3.setForeground(SWTResourceManager.getColor(SWT.COLOR_INFO_BACKGROUND));
    		text_3.setFont(SWTResourceManager.getFont("Georgia", 12, SWT.NORMAL));
    		text_3.setTextLimit(15);
    		text_3.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
    		text_3.setBounds(37, 61, 146, 20);
     
    	.............
    	.............
    	.............
    Est-ce que tu veux dire que je dois surclasser ma Shell en y ajoutant des attributs qui seraient les Control de la shell ?

  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 : 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
    Bah non, c'est très bien comme ça...
    En fait, je vois pas du tout pourquoi tu veux passer par le Shell alors que tu as déjà des instances de tes éléments graphiques en attribut de ta classe
    Si ton soucis c'est de rafraîchir ton widget de Text (text_6 par exemple), c'est bon, c'est exactement ce que tu fais dans ton bout de code.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Par défaut
    Non non, tout fonctionne bien, c'est juste que dans le worker thread, comme je suis obligé de passer le display pour faire des mises à jour asynchrones, et qu'on peut récupérer tous les Control dans le display, je trouvais ça pas optimisé de passer aussi les contrôles dont j'ai besoin, voire toute la classe.

Discussions similaires

  1. ajout d'un controle dans un tableau extensible
    Par dcarroz dans le forum InfoPath
    Réponses: 5
    Dernier message: 09/07/2008, 12h10
  2. Réponses: 2
    Dernier message: 29/06/2007, 14h49
  3. Comment mettre les lignes d'un fichier dans un tableau en shell
    Par Ombrius dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/10/2006, 12h34
  4. [SWT] Retour a la ligne dans un tableau
    Par kivan_ dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 19/03/2006, 16h28
  5. Envoyer des controles d'un formulaire dans un tableau
    Par CB56 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/11/2005, 10h43

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