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

Eclipse Platform Discussion :

Update / refresh un Part


Sujet :

Eclipse Platform

  1. #21
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    C'est fait j'ai toujours l'erreur au même endroit pour les mêmes raisons et du coup que dois-je mettre dans cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class SectionViewerFactory extends AbstractViewerFactory<SectionExtension>
    {
    	@Override
    	public AbstractViewer createViewer(Composite parent, SectionExtension section)
    	{
        	        return null;
    	}
    }
    EDIT : Pour l'erreur j'ai trouvé la solution il faut rajouter .getName() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object, AbstractViewerFactory.class.getName());
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  2. #22
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Bon alors voilà où j'en suis à l'heure actuel :

    Ma Part :

    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
    @PostConstruct
    	public void createControls(Composite parent)
    	{
    		composite = parent;
    		try
    		{
    			Object[] object = pickedState.getSelectedObjects();
    	                AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    	                AbstractViewer viewer = factory.createViewer(parent, object[0]);
    		}
    		catch(Exception e)
    		{
    			System.out.println(e);
    		}
    	}
     
    	public static void setPickedState(PickedState pick)
    	{
    		pickedState = pick;
    		Object[] object = pickedState.getSelectedObjects();
                    AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
                    System.out.println(factory);
                    AbstractViewer viewer = factory.createViewer(composite, object[0]);
    	}
    }
    Le try and catch est la car forcément quand je lance l'appli au départ il n'y a rien de sélectionné donc j'avais un null pointer.

    Mon SectionViewerAdapterFactory :

    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
    public class SectionViewerAdapterFactory implements IAdapterFactory
    {
     
        private static final Class[] ADAPTED = new Class[]{ AbstractViewerFactory.class };
     
     
        public Object getAdapter( Object adaptableObject, Class adapterType )
        {
            if ( adaptableObject instanceof SectionViewer && AbstractViewerFactory.class.equals(adapterType) )
            {
            	SectionViewerFactory viewer = new SectionViewerFactory(); 
                    return viewer;
            }
            return null;
        }
     
     
    	public Class[] getAdapterList()
    	{
    		return ADAPTED;
    	}
    }
    Mon SectionViewerFactory :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class SectionViewerFactory extends AbstractViewerFactory<SectionExtension>
    {
    	@Override
    	public AbstractViewer createViewer(Composite parent, SectionExtension section)
    	{
    		SectionViewer view = new SectionViewer(parent, section);
        	        return view;
    	}
    }
    Mon Section Viewer :

    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
    public class SectionViewer extends AbstractViewer
    {
    	SectionExtension section;
     
    	public SectionViewer(Composite parent, SectionExtension section)
    	{
    		super(parent);
    		this.section = section;
    	}
     
    	@Override
    	@PostConstruct
    	public void createControls(Composite parent)
    	{
    		composite = parent;	
    		Label lblWall = new Label(composite, SWT.NONE);
    		lblWall.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    		lblWall.setText("Wall :");
    		new Label(composite, SWT.NONE);
             }
    }
    Et pour finir ce que j'ai mis dans mon plugin.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <extension point="org.eclipse.core.runtime.adapters">
       	<factory adaptableType="SectionExtension"  class="SectionViewerFactory">
             	<adapter
                	       type="AbstractViewerFactory">
             	</adapter>
         	</factory>
    </extension>
    Cependant j'ai un null pointer quand je mets à jour le pickedState sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AbstractViewer viewer = factory.createViewer(composite, object[0]);
    Car factory est égale à null. Une idée d'où provient mon erreur ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  3. #23
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le .getName() dans AbstractViewerFactory.class.getName(). C'est la classe qu'il faut passer en argument.

    Par ailleurs, adaptableObject instanceof SectionViewer ne va pas : l'adaptableObject c'est l'objet qu'on adapte, celui dans ta sélection. Alors que SectionViewer, c'est celui qu'on va obtenir par la fabrique à priori.

    En résumé : j'ai un object A, B, C..., je veux obtenir un "viewer de section", qui sera fabriqué par une "fabrique de viewer de section", qu'on obtiendra par adaptation de A, B, C... vers la fabrique abstraite (respectivement une "fabrique de viewer de section pour A", "fabrique de viewer de section pour B", "fabrique de viewer de section pour C"...), avec une fabrique d'adapter par objet (une pour A, une pour B, une pour C...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #24
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Je n'ai pas bien compris ta première phrase.

    il n'est pas possible de mettre que Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class); comme dans ton exemple, car loadAdapter attends un objet et un String en argument. Je suis allé voir la doc de IAdapterManager et pour être exact il attend en paramètre :

    adaptable - the adaptable object being queried (usually an instance of IAdaptable)
    adapterTypeName - the fully qualified name of the type of adapter to look up


    J'ai donc essayé le .getName(), .getCanonicalName(), .getSimpleName() et .getTypeName(), mais aucun ne fonctionne.

    Donc il faut mettre quoi ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  5. #25
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ah oui, autant pour moi, c'est bien le nom de la classe qui faut passer (.getName() donc).

    Le problème bien de l'extension : <factory adaptableType="SectionExtension" class="SectionViewerFactory">. là, le nom de la classe devrait être le nom entier (d'ailleurs, si tu utilises le helper d'édition, tu ne peux pas faire autrement, et pas l'édition en mode texte, tu dois avoir un warning).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #26
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Ah oui voilà j'avais oublié les package ^^'

    Dernière question (j'espère). Là j'ai un Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access sur la ligne AbstractViewer viewer = factory.createViewer(composite, object[0]);.

    Je pense que ça viens du fait que je dois pas mettre à jours correctement ma Part voilà le code de ma Part :

    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
    public class PropertiesPart
    {
    	private static PickedState pickedState;
    	public static Composite composite;
     
    	@PostConstruct
    	public void createControls(Composite parent)
    	{
    		composite = parent;
    		try
    		{
    			Object[] object = pickedState.getSelectedObjects();
    	                AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    	                AbstractViewer viewer = factory.createViewer(parent, object[0]);
    		}
    		catch(Exception e)
    		{
    			System.out.println(e);
    		}
    	}
     
    	public static void setPickedState(PickedState pick)
    	{
    		pickedState = pick;
    		Object[] object = pickedState.getSelectedObjects();
                    AbstractViewerFactory factory = (AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
                    AbstractViewer viewer = factory.createViewer(composite, object[0]);
    	}
    }
    La méthode setPickedState est celle que j'appelle quand je clique sur un objet dans ma partie graphique. Mais je du coup je sais pas trop comment mettre à jour la part, donc j'ai mis le code là, mais ça à pas l'air d'être ça.
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  7. #27
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il y a du Swing dans ton application ?

    Il faut construire les composants SWT dans le thread de SWT : celui du Display par défaut du workbench, avec un display.syncExec ou display.asyncExec, si tu n'es pas dans le thread SWT à la base, mais ce n'est pas vraiment normal que tu n'y sois pas (surtout si tu as réagi à un changement de sélection provenant du workbench).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #28
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Oui il y a du Swing, la bibliothèque graphique que j'utilise pour le graphique est Jung et elle est sous Swing. Je l'ai facilement intégré car SWT permet de le faire. Mais du coup quand je clique sur un objet dans le graphique c'est en SWING du coup je dois faire quelque chose comme ça ?

    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
    public class PropertiesPart
    {
    	private static PickedState pickedState;
    	public static Composite composite;
     
    	@PostConstruct
    	public void createControls(Composite parent)
    	{
    		composite = parent;
    		try
    		{
    			Object[] object = pickedState.getSelectedObjects();
    	                AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    	                AbstractViewer viewer = factory.createViewer(parent, object[0]);
    		}
    		catch(Exception e)
    		{
    			System.out.println(e);
    		}
    	}
     
    	public static void setPickedState(PickedState pick)
    	{
    		pickedState = pick;
    		Display.getDefault().syncExec(new Runnable()
    		{
    		    public void run()
    		    {
    		        Object[] object = pickedState.getSelectedObjects();
    		        AbstractViewerFactory factory = (AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    		        AbstractViewer viewer = factory.createViewer(composite, object[0]);
    		    }
    		});
     
    	}
    }
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  9. #29
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, quelque chose comme ça.

    N'oublie pas par ailleurs que tu dois detruire le composant créé lors de l'exécution précédente (dispose()).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #30
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Donc au final j'ai fait comme ceci :

    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
    public static void setPickedState(PickedState pick)
    {
    		pickedState = pick;
     
    		Display.getDefault().syncExec(new Runnable()
    		{
    		    public void run()
    		    {
    		                try
    				{
    					viewer.dispose();
    				}
    				catch(Exception e)
    				{
    					System.out.println(e+"1");
    				}
    		               Object[] object = pickedState.getSelectedObjects();
    		               AbstractViewerFactory factory = (AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    		               viewer = factory.createViewer(composite, object[0]);
    		    }
    		});
    }
    Donc ça "fonctionne" c'est-à-dire que je n'ai plus aucune erreur, ça passe bien bien dans mon createCrontrols() de SectionViewer, mais rien ne s'affiche, ça ne change rien dans la Part.

    Voilà mon SectionViewer :

    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
    public class SectionViewer extends AbstractViewer
    {
    	SectionExtension section;
     
    	public SectionViewer(Composite parent, SectionExtension section)
    	{
    		super(parent);
    		this.section = section;
    	}
     
    	@Override
    	public void createControls(Composite parent)
    	{
    		System.out.println("test");
    		ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    		scrolledComposite.setLocation(149, 0);
    		scrolledComposite.setExpandHorizontal(true);
    		scrolledComposite.setExpandVertical(true);
     
    		Composite composite = new Composite(scrolledComposite, SWT.NONE);
    		composite.setLayout(new GridLayout(8, false));
    		new Label(composite, SWT.NONE);
    		new Label(composite, SWT.NONE);
    		new Label(composite, SWT.NONE);
    		new Label(composite, SWT.NONE);
    		new Label(composite, SWT.NONE);
    		new Label(composite, SWT.NONE);
     
    		Label lblWall = new Label(composite, SWT.NONE);
    		lblWall.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    		lblWall.setText("Wall :");
    		new Label(composite, SWT.NONE);
              }
    }
    le SoP s’exécute correctement.
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  11. #31
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est probablement parce qu'il faut reforcer le layout (par un appel de doLayout()) et refraichir la vue (par un appel de redraw()), sur le parent du composite que tu passes en argument, ou sur le composite lui-même (ça dépend du layout manager).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #32
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    doLayout() ce ne serait pas plutôt pour de l'AWT ? Seul ma Part graphique possède de l'AWT. Toutes mes autres Parts (dont celle que je veux update) ne possède que du SWT.

    Pour le redraw, j'ai essayé composite.redraw(); et composite.getParent().redraw();, mais sans résultat, après il est possible que je ne le mette pas au bonne endroit. Dois-je mettre ce bout de code dans la Part ou dans le Viewer ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  13. #33
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par maelstrom Voir le message
    doLayout() ce ne serait pas plutôt pour de l'AWT ?
    Oui, cétait layout() que je voulais dire, pour SWT (en AWT, on appelerait plutôt revalidate()).

    Citation Envoyé par maelstrom Voir le message
    Pour le redraw, j'ai essayé composite.redraw(); et composite.getParent().redraw();, mais sans résultat, après il est possible que je ne le mette pas au bonne endroit. Dois-je mettre ce bout de code dans la Part ou dans le Viewer ?
    A faire après la création du viewer, là où le viewer est créé (dans le Part donc, après viewer = factory.createViewer(composite, object[0]);).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #34
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Aucun changement, j'ai donc ceci dans ma Part :

    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
    public class PropertiesPart
    {
    	private static PickedState pickedState;
    	public static Composite composite;
    	public static AbstractViewer viewer;
     
    	@PostConstruct
    	public void createControls(Composite parent)
    	{
    		composite = parent;
    		try
    		{
    			Object[] object = pickedState.getSelectedObjects();
    	        AbstractViewerFactory factory=(AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    	        AbstractViewer viewer = factory.createViewer(parent, object[0]);
    		}
    		catch(Exception e)
    		{
    			System.out.println(e+"0");
    		}
    	}
     
    	public static void setPickedState(PickedState pick)
    	{
    		pickedState = pick;
     
    		Display.getDefault().syncExec(new Runnable()
    		{
    		    public void run()
    		    {
    		        try
    				{
    					viewer.dispose();
    				}
    				catch(Exception e)
    				{
    					System.out.println(e+"1");
    				}
    		        Object[] object = pickedState.getSelectedObjects();
    		        AbstractViewerFactory factory = (AbstractViewerFactory)Platform.getAdapterManager().loadAdapter(object[0], AbstractViewerFactory.class.getName());
    		        viewer = factory.createViewer(composite, object[0]);
    		        composite.layout();
    		        composite.redraw();
    		    }
    		});
    	}
    }
    J'ai aussi essayé avec composite.getParent().layout(); et composite.getParent().redraw();, mais toujours aucun changement. Je me demande si ça vient pas du fait que le composite soit static. Pourtant quand je regarde en mode debug on passe bien dans le createControls(Composite parent) du Viewer.
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  15. #35
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oula, c'est quoi cet accès static ? Il faudrait plutôt récupérer le part par son id, via PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(viewId) et faire un appel non static, à défaut de communiquer via un ISelectionProvider (ce que je fais personellement pour mes composants AWT). Je ne fais pas de E4, mais ça me semble étonnant que ta classe de Part n'étende pas ViewPart. A l'ouverture initial de la vue, il y a quelque chose qui s'affiche dans la vue (ça m'étonnerait)) ? Dans ton .log, il n'y aurait pas des NullPointerException ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #36
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Je me suis dit que comme je n'aurais qu'une Part Properties à la fois le static serait la solution la plus simple et la plus rapide. Après pour ce qui est d'étendre ViewPart et PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(viewId), ça ne marche plus comme ça avec e4.

    Petite aparté au passage j'ai un peu l'impression que c'est à la fois toutes la force et tout le bordel de RCP4, plus besoin d'étendre les vues et plus besoin de gérer tout ces trucs avec le Workbench, mais du coup dès que l'on veut avoir accès à quelque chose (retrouver le Composite d'une part ou autre chose) c'est le bordel, après je suis qu'un novice en rcp 4 donc il se peut que je me trompe. fin aparté.

    Donc du coup, je n'ai aucun null pointer (ou du moins pas à cause de ça). Cet accès static est-ce que ça dérange vraiment au final ? (je suis tout de même en train de chercher des solutions pour y remédier).
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  17. #37
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par maelstrom Voir le message
    Cet accès static est-ce que ça dérange vraiment au final ? (je suis tout de même en train de chercher des solutions pour y remédier).
    Non, c'est simplement que c'est une très mauvais pratique, en POO. Et pour peu le part soit multiple, et ça ne fonctionnera pas : essaye de voir justement s'il n'y a pas plusieurs instances (en mettant une trace dans le constructeur, ou en mode debug).

    Pour E4, c'est effectivement très nebulleux le fonctionnement, et je trouve qu'il y a peu de documentation qui défriche tout ça. M'enfin, si tu n'as pas de NPE, c'est que la PostConstruct n'est pas effectué (pickedState est forcément null à la construction).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #38
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Alors quand je disais que je n'avais pas de NPE je ne comptais pas ce que je gère avec un try and catch (je sais que la variable est null au départ, je ne savais juste pas faire autrement, ou du moins je n'ai pas encore pris le temps).

    Sinon j'ai trouvé un début de réponse, je sais pourquoi cela ne réapparaissait pas. C'était à cause de AbstractViewer, voilà ce que tu m'avais donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public abstract class AbstractViewer extends Composite
    {
     
    	public AbstractViewer(Composite parent)
    	{
    		super(parent, SWT.NONE);
    		createControls(this);
    	}
     
    	protected abstract void createControls(Composite parent);
    }
    Or forcément si dans le createControls j'envoie this, cela ne marche pas. J'ai donc essayé ceci : createControls(PropertiesPart.composite); (oui j'utilise le static, je changerais ça plus tard).

    Avec ceci ça marche à moitié, ma Part est bien vide au départ et quand je clique la Part apparait... Mais pas comme il faut voici ce que j'obtient :



    Comme on le voit cela ne prend que la moitié de la Part et si clique sur une autre Section :



    Cela coupe en 3. Je pense que cela viens du dispose() qui ne doit pas se faire correctement. Qu'en penses-tu ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  19. #39
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il y a un truc que je n'avais pas pensé aussi : le widget parent d'un Part (en E3 en tout cas) est layouté en GridLayout. Donc normalement, on doit affecter un GridData au composite qu'on y met, mais par défaut, avec le GridLayout, on en a un, mais pas en SWT.FILL/grab=true, ce qu'il faudrait forcer.

    Pour le createControls(this) dans l'AbstractView, il est correct, mais il faut gérer un layout, sinon effectivement on ne voit rien. Surtout ne pas faire de référence direct à un parent : on doit être indépendant du contexte.

    Le dispose(), s'il est bien fait sur le composant AbstractViewer retire celui-ci de son parent (celui qui est passé en paramètre du constructeur donc), donc n'a rien à voir à priori avec le comportement que tu vois : c'est dû uniquement au layout de "composite", et au layoutdata du AbstractViewer.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #40
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Qu'entends-tu par gérer le layout ? Je fais déjà un .layout() sur le AbstractViewer, mais que faut-il faire de plus et surtout dans qu'elle partie ? Je dois avouer que tout cela me parait un peu sombre là ^^'
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. datagridview update ou refresh ?
    Par tro2blabla dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/10/2014, 10h44
  2. update+The multi-part identifier
    Par jawadi95 dans le forum Développement
    Réponses: 2
    Dernier message: 02/06/2008, 10h31
  3. Refresh automatique d'un wep part ?
    Par MelleMariel dans le forum SharePoint
    Réponses: 2
    Dernier message: 18/06/2007, 15h51
  4. ADO.NET INSERT DELETE UPDATE refresh des composants graphic
    Par jeriko dans le forum Accès aux données
    Réponses: 5
    Dernier message: 15/01/2007, 15h17

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