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

AWT/Swing Java Discussion :

[JInternalFrame] Créer de nouvelles instances


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 893
    Par défaut [JInternalFrame] Créer de nouvelles instances
    Bonjour

    Voici mon problème. Dans mon application, je charge des classes provenant de jars extérieures à mon application (en l'occurence, des plugins). En fonction de ce que je récupère, je met à jour un JMenu qui liste les plugins activables (ajout d'un JMenuItem par plugin). Dans mon plugin d'essai, celui-ci affiche une JInternalFrame dans l'application mère. Si je le fais une fois, ça marche, pas de problème. Mais si je reclique sur le JMenuItem relatif à ce plugin, j'ai alors l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position
    	at java.awt.Container.addImpl(Container.java:1034)
    	at javax.swing.JLayeredPane.addImpl(JLayeredPane.java:209)
    	at javax.swing.JDesktopPane.addImpl(JDesktopPane.java:470)
    	at java.awt.Container.add(Container.java:352)
    	at com.machin.gui.MainWindow$6.actionPerformed(MainWindow.java:167)
    Voici la méthode qui est incriminée dans l'exception :
    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
     
    private void Scan(){
    		PluginsList list = new PluginsList();
     
    		for(Object o : list.plugins){
    			if(o instanceof Plugin){
    				plugins1.add((Plugin) o);
    				item = new JMenuItem(plugins1.get(plugins1.size()-1).prediction);
    				predictions.add(item);
    				item.addActionListener(new ActionListener(){
    					public void actionPerformed(ActionEvent e){
     
    					}
    				});
    			}
    			else if(o instanceof InternalFrame){
    				plugins2.add((InternalFrame) o);
    				System.out.println(plugins2.size());
    				item = new JMenuItem(plugins2.get(plugins2.size()-1).prediction);
    				predictions.add(item);
    				item.addActionListener(new ActionListener(){
    					public void actionPerformed(ActionEvent e){
    						plugins2.get(plugins2.size()-1).setSize(200, 200);
    						plugins2.get(plugins2.size()-1).setVisible(true);
    						//Ligne incriminée dans l'exception
    BioXpress.mw.getJDesktopPane().add(plugins2.get(plugins2.size()-1));
    					}
    				});
    			}
    		}
     
     
    		int cpt = predictions.getItemCount();
    		if(cpt>0)
    			this.predictions.setEnabled(true);
     
    		list.setVisible(true);
    	}
    Merci à la bonne âme qui viendra à mon secours.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 893
    Par défaut
    Bon, et bien, j'ai solutionné mon problème en coupant en 2 méthodes :
    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
     
    public void actionPerformed(ActionEvent e) {
    		for(Object o : allplugins){
    			if(o instanceof Plugin){
     
    			}
    			else if(o instanceof InternalFrame){
    				InternalFrame ifr = (InternalFrame)o;
    				if(ifr.prediction.compareTo(e.getActionCommand())==0){
    					InternalFrame nifr = null;
    					try{
    						nifr = ifr.getClass().newInstance();
    					}
    					catch(IllegalAccessException iae){
     
    					}
    					catch(InstantiationException ie){
     
    					}
    					nifr.setSize(200, 200);
    					nifr.setVisible(true);
    					jDesktopPane.add(nifr, -1);
    				}
    			}
    		}
    	}
     
    	private void Scan(){
    		PluginsList list = new PluginsList();
    		predictions.removeAll();
    		plugins1.clear();
    		plugins2.clear();
    		allplugins.clear();
     
    		for(Object o : list.plugins){
    			allplugins.add(o);
    			if(o instanceof InternalFrame){
    				InternalFrame ifr = (InternalFrame)o;
    				item = new JMenuItem(ifr.prediction);
    				item.addActionListener(this);
    			}
    			else if(o instanceof Plugin){
    				Plugin ifr = (Plugin)o;
    				item = new JMenuItem(ifr.prediction);
    				item.addActionListener(this);
    			}
    			predictions.add(item);
    		}
     
     
    		int cpt = predictions.getItemCount();
    		if(cpt>0)
    			this.predictions.setEnabled(true);
     
    		list.setVisible(true);
    	}
    La lumière résidait en un appel à newInstance

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/01/2015, 13h42
  2. Réponses: 2
    Dernier message: 23/11/2012, 15h25
  3. Comment créer une nouvelle instance
    Par leberluxe dans le forum MySQL
    Réponses: 1
    Dernier message: 17/05/2011, 18h54
  4. créer une nouvelle instance panel dynamique
    Par lovedesitaliens dans le forum C#
    Réponses: 4
    Dernier message: 25/10/2010, 16h45
  5. SQL server express 2008, créer nouvelle instance
    Par fafa63 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/04/2010, 10h49

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