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

Interfaces Graphiques en Java Discussion :

Faire appel a une seule instance


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Faire appel a une seule instance
    Salut tous le monde,

    Dans mon projet, j'ai crée un JMenuItem qui ouvre un projet mais le problème c'est quand j'ouvre un autre projet le premier ne s'écrase pas mais il se duplique(je crois )
    donc je voudrais savoir comment crée une seule instance en écrasant la précedente

    appel du projet de la principale frame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int status = fileChooser.showOpenDialog(null);
    				if (status == JFileChooser.APPROVE_OPTION) {
    					File selectedFile = fileChooser.getSelectedFile();
    					if(fileProject.deserialze(selectedFile.getPath())){
    						create(fileProject.getColumns(), fileProject.getSitePane()); // 
    						frm.revalidate();
    						frm.repaint();
     
    					}
    Méthode create dans le code si dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static void create(ColumnsUI cols, SiteTypePannelUI siteType){
    		MainTabbedPaneUI mainTabbedPane = new MainTabbedPaneUI(); // on appel la frame qui contient le projet
    		mainTabbedPane.create(cols, siteType);
    		mainTabbedPane.setBounds(10, 109, 586, 583);
     
    		frm.getContentPane().add(mainTabbedPane);
    Et voici la méthode qui crée jtabbedpane(qui s'affiche dans la main frame)

    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
     
    public void create(ColumnsUI cols, SiteTypePannelUI siteType){
    		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
    		countInstances++;
    		tabbedPane.setBounds(10, 11, 533, 577);
    		add(tabbedPane);
    		tabbedPane.addTab("Site", iconSite, siteType);
    		tabbedPane.addTab("Table",iconTable, cols);
    		tabbedPane.addTab("Links",iconLinks, null);
    		tabbedPane.setVisible(true);
    		refresh();
    	}
     
    	public void refresh(){
    		revalidate();
    		repaint();
    	}

    Ouvrir un projet ( 1ere fois ) :
    Nom : 1.PNG
Affichages : 118
Taille : 1,7 Ko
    Ouvrir un projet (2 éme fois ) :
    Nom : 2.PNG
Affichages : 118
Taille : 1,9 Ko

  2. #2
    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
    Salut,

    De quelle instance parles-tu ? De l'instance de projet ou de l'instance de fenêtre ?
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    je parle de la MainTabbedPaneUI (JPanel) , je voudrais qu'a chaque fois que j'appel la méthode "create" une seule instance sera crée et même s'il y a une autre qui est déjà crée donc elle sera écraser .

  4. #4
    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
    Ok, donc pour chaque projet, tu voudrais une et une seule instance de MainTabbedPaneUI. Premièrement, il te faut un moyen d'identifier de manière unique un projet. Mettons qu'on ait une classe qui désigne cet identifiant unique (mais ça peut être n'importe quel classe immutable, Integer, String, File, URL...) qui s'appelle ProjectId. Ça peut être également la classe qui gère le Projet lui-même). L'important que c'est les méthodes equals() et hashCode() soient correctement codées (conformes à leur javadoc et vérifiant l'égalité de 2 identifiants).

    Il te suffit d'utiliser une map, pour associer un id et un MainTabbedPaneUI : lors de l'ouverture d'un projet, s'il y a déjà un MainTabbedPaneUI associé à l'id du projet, tu utilises celui-là, sinon tu en crées un nouveau et tu le mets danas la map. A la fermeture du MainTabbedPaneUI, il faudra l'enlever de la map.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final Map<ProjetID, MainTabbedPaneUI > uis = new HashMap<>();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public final MainTabbedPaneUI open(ProjectId projectId) {
       return uis.computeIfAbsent(projectId, id-> createMainTabbedPaneUI(id)); 
    }
     
    public final void close(ProjectId projectId) {
       uis.computeIfPresent(projectId, (id,ui)-> {
                                                  closeMainTabbedPaneUI(ui);
                                                  uis.remove(id);
                                                 });
    }
    Pour les méthodes createMainTabbedPaneUI et closeMainTabbedPaneUI, fais comme tu fais déjà, ça ne change pas.
    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.

Discussions similaires

  1. Une seule instance de l'appli et exécuter une procédure
    Par Manic dans le forum API, COM et SDKs
    Réponses: 11
    Dernier message: 08/03/2006, 11h52
  2. Réponses: 11
    Dernier message: 06/12/2005, 08h23
  3. [JUnit] Avoir une seule instance
    Par hocinema dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 25/10/2005, 15h48
  4. Réponses: 4
    Dernier message: 26/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