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

EDT/SwingWorker Java Discussion :

afficher une image au click


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut afficher une image au click
    Bonjour, je souhaite ajouter dans mon application un gif en guise de barre de progression infini afin d'avertir l'utilisateur que l'appli n'est pas bugé


    Voila comment est organisé mon code :
    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
     
    public  void AjoutComposant(final Container pane) throws FileNotFoundException, IOException {
    	        final GridBagConstraints c = new GridBagConstraints();
    	        if (shouldFill) {
    	            c.fill = GridBagConstraints.HORIZONTAL;
    	        }
    image.hide();
    c.gridx = 2;
    	        c.gridy =0;
    	        c.ipady = 10;      
    	        c.weightx = 0.0;
    	        c.gridwidth = 3;
    	        c.insets.top=5;
    	        pane.add(image, c);
      c.gridx = 3;
    	        c.gridy = 4;
    	        c.ipadx=0;
    	        c.ipady = 0;
    	        c.gridwidth = 1;
    	        c.insets.left=10;
    	        c.insets.right=5;
    	        c.insets.bottom=90;
    	        pane.add(boutonOpen, c);
     
    	        c.ipady = 40;      
    	        c.weightx = 0.0;
    	        c.gridwidth = 3;
    	        c.gridx = 2;
    	        c.gridy = 5;
    	        c.insets.left=100;
    	        c.insets.right=100;
    	        c.insets.bottom=20;
    	        c.insets.top=20;
    	        pane.add(boutonConfirm, c);
    ...........
    L'action listener sur le bouton permettant de lancer l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	    	 boutonConfirm.addActionListener(new ActionListener(){
    	    		 public void actionPerformed(ActionEvent ev){
    	    			 if (selectionFichier==null || selectionFichier.length==0)
    	    				 JOptionPane.showMessageDialog(boutonConfirm, "Veuillez choisir au moins un fichier");
    	    			 else {      
     
    	    	        TraitementXml.process(selectionFichier); 
    	    	        JOptionPane.showMessageDialog(pane,"Traitement Terminé","Information",JOptionPane.INFORMATION_MESSAGE);
     
    	    		 }
    	    		 }
    	    	 });
    J'ai donc caché pour l'instant l'image mais ne vois pas comment la faire apparaitre (ce que je dois ajouter dans l'action listener).


    Merci beaucoup d'avance!

  2. #2
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Bonjour

    Ca prend un composant pour dessiner l'image ex:
    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
     
    class DrawingPane extends JPanel {
        	BufferedImage image = null;
     
        	// méthode override
        	public void paintComponent(Graphics g){
        		super.paintComponent(g);
        		if (image != null)
        			g.drawImage(image, 0, 0, this);
        	}
     
        	//loader l'image
        	public void loadImage(File filename){
        		image = ImageIO.read(filename);
        		repaint();
        	}
    }

    une fois ce composant ajouté a ton frame, il suffit d'appler loadImage() au bon moment. probablement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     boutonConfirm.addActionListener(new ActionListener(){
    	    		 public void actionPerformed(ActionEvent ev){
    	    			 if (selectionFichier==null || selectionFichier.length==0)
    	    				 JOptionPane.showMessageDialog(boutonConfirm, "Veuillez choisir au moins un fichier");
    	    			 else {
    monDrawingPane.loadImage(new File("pathCompletDeLimage.gif");      
    	    				
    	    	        TraitementXml.process(selectionFichier); 
    	    	        JOptionPane.showMessageDialog(pane,"Traitement Terminé","Information",JOptionPane.INFORMATION_MESSAGE);
    		    		
    	    		 }
    	    		 }
        	 });
    ca aide ?

  3. #3
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Merci jibbi, mais par rapport à la structure de mon doc c'est pas vraiment évident d'insérer ce que tu as fait

  4. #4
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    J'ai ajouter ca avant le precedent actionlistener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	        boutonConfirm.addMouseListener(new MouseAdapter() {
    	        	 public void mousePressed( MouseEvent e) {
    	    			 image.setVisible(true);
    	    			System.out.println("zzzz");	    				 
     
    	    		 }
    	        });
    Le probleme est que le gif ne bouge pas pdt le traitement qui est associé à l'action listener , ce qui est quand meme le but de la manoeuvre (J'ai pas trouver le bouton "Inversement de processus" )

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 846
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    Quand tu effectues une action durant l'EDT en reponse a un evenement, tu te trouves entres 2 reaffichages de l'interface. Donc toute modification ne sera apparente que lorsque ton action sera terminee (c'est pour cela que la GUI se bloque si la tache est trop longue).

    Il te faut donc :
    - modifier l'apparence de ta GUI en reponse a l'evenement.
    - demarrer la tache plus tard.
    Meme chose s'il faut mettre a jour l'interface pendant le traitement.

    Cela peut etre fait, pour les taches les plus simples vers les plus complexes, par :
    - un appel a SwingUtilities.invokeLater().
    - un Timer Swing.
    - l'utilisation d'un SwingWorker ou de Thread (mais pour la Thread il faut controler les interractions avec la GUI puisque ces dernieres doivent etre faites durant l'EDT sous peine de crash et autres erreurs).

    Ensuite pour des animations plus complexes dans l'interface, voir du cote du timing framework.

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

Discussions similaires

  1. [Débutant] Afficher une image suite à un click
    Par chayma.aguibi dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/03/2013, 14h30
  2. [Débutant] Afficher une image avec un click de souris, interface graphique
    Par patrice13 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 03/01/2012, 22h07
  3. Afficher une image lors d'un click sur un lien
    Par hachdotnet dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/04/2009, 15h20
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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