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

Agents de placement/Fenêtres Java Discussion :

Limiter le nombre de Jframe ouvertes


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut Limiter le nombre de Jframe ouvertes
    Bonjour,

    Voici mon probleme: un clic sur une image entraine l'ouverture d'une Jframe. Mais je voudrais interdire le fait d'en ouvrir deux. Autrement dit, quand l'utilisateur clic sur l'image, si une Jframe est deja ouverte, j'aimerai que cette Jframe se ferme, et qu'une nouvelle apparaisse.
    J'ai donc procédé de la maniere suivante : avant de creer la Jframe, je teste si elle existe deja, et je la "dispose".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if (fenetre != null )
    fenetre.dispose();
    Malgres cela, et particulierement sur un ordinateur lent, (500 Mhz, 512 Mo de Ram ) en cliquant frenetiquement sur l'image, il arrive que plusieurs Jframe s'ouvrent. Y-aurait-il un moyen pour eviter cela ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Pourrais tu mettre le code complet de ton image stp?

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah pourquoi ne tout simplement pas changer l'image contenue dans la JFrame déjà ouverte?

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut
    J'ai du mal m'exprimer. L'image contenue dans le Jpanel ne doit pas changer. En cliquant sur cette image une sorte de pop-up s'ouvre (la Jframe). Cette Jframe contient deux listes.
    Le probleme etant que je voudrais qu'il ne soit possible d'ouvrir qu'une seule de ces Jframe a la fois(et pas ouvrir une Jframe a chaque clic. Si l'utilisateur clic sur l'image et que la Jframe est deja ouverte, elle doit se fermer, et une nouvelle devrait s'ouvrir ).

    En ce qui concerne le code :

    Jpanel contenant l'image :
    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
     
    	this.addMouseListener(new java.awt.event.MouseAdapter() {
    			public void mousePressed(final java.awt.event.MouseEvent e) {
    				new SwingWorker() {
    					public Object construct() {
    						…
    						startList(x, y);
     
     
     
    							return null;						
    						}
    				}.start(); 
     
    private void startList(int x, int y) {
    		if (popup != null) {
    			popup.dispose();
    			}
    		else
    			popup = new ListPopup();
    (Popup etant la Jframe qui ne devrait s'ouvrir qu'une seule fois)

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pourquoi utilises-tu un SwingWorker ici, un EventQueue.involeLater suffirait largement il me semble ?

    Dans le cas de clics frénétiques, je pense que tu es coincé par le délai entre la création d'une fenêtre et son affichage, et pareil pour le dispose. Ni la création d'une fenêtre, ni le dispose ne sont atomiques, même de loin. Je pense que ton code abouti à faire le dispose de la même fenêtre plusieurs fois, et / ou à créer plusieurs fenêtres alors que l'on croit qu'il n'y en a aucune.

    Je pense que la solution la plus simple pour toi serait de mémoriser les informations de présence / absence de fenêtre dans un booléen, information certe redondante avec la fenêtre, mais qui réagit immédiatement.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut
    Merci beaucoup pour ta réponse. J'ai commencé par remplacer mon swingworker par un EventQueue.invokeLater et du coup, la methode avec popup.dispose() marche, je n'ai plus de problème, la fenetre se referme systematiquement si elle etait auparavant ouverte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	this.addMouseListener(new java.awt.event.MouseAdapter() {
    			public void mousePressed(final java.awt.event.MouseEvent e) {
    				EventQueue.invokeLater(new Runnable() {
    					public void run() {
    							StartList(x, y);
     
    						}
    				}); 
    			}
    		});
    Par contre j'ai l'impression que mon interface est moins reactive. L'ouverture de la fenetre entrainant differents acces a une base de donnée, mon interface "freeze" un peu plus. Alors que le fait d'utiliser invokeLater devrait justement eviter de contraindre l'EDT, non ? Bizarre ...

Discussions similaires

  1. Limiter le nombre de fichiers ouverts simultanément
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/04/2013, 08h04
  2. Limitation au nombre de fichiers ouverts
    Par ram-0000 dans le forum Windows
    Réponses: 0
    Dernier message: 13/11/2007, 11h43
  3. limiter le nombres de fenetres ouvertes de IE
    Par Essilife dans le forum IE
    Réponses: 5
    Dernier message: 31/03/2006, 14h29
  4. [débutant] Limitation du nombre d'enregistrement renvoyé
    Par tmcgrady dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2003, 09h41
  5. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47

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