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 :

faire glisser une image sur une autre - SwingWorker


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut faire glisser une image sur une autre - SwingWorker
    Bonjour,
    je voudrais, après avoir appuyer sur un bouton, faire bouger une JPanel sur un autre (ici une translation horizontal par pas de 10 avec une pause de 200ms)
    je ne vois pas les positions intermédiaires mais que la position finale (je perd un peu de mon effet de glissement!)
    Après des recherches, j'ai cru comprendre qu'il fallait utiliser un SwingWorker mais malgrès mes recherches je suis manifestement incapable de m'en servir !


    ci-joint mon programme très faux et surement très naïf :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    package essai;
     
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class fenetre extends JFrame implements MouseListener
    {
    	private static final long serialVersionUID = 1L;
     
    	public monPanel monFond = new monPanel("/image/fond.jpg");
    	public monPanel monMobil = new monPanel("/image/mobile.jpg");
    	public JButton bouton = new JButton();
     
    	public fenetre()
    		{
    		this.setLayout(null);
    		this.setSize(1000,500);
    		this.setLocationRelativeTo(null);
    		this.setVisible(true);
     
    		// --------- panelFond ----------
    		monFond.add(monMobil);
    		monMobil.setLocation(0, 0);
    		this.add(monFond);
    		monFond.setLocation(0, 0);
    		// -------- bouton -------------
    		bouton.setSize(40, 40);
    		bouton.setLocation(800, 20);
    		bouton.addMouseListener(this);
    		this.add(bouton);
    		}
    	public void tempPause(int tps)  
    		{  
    		try {Thread.sleep(tps);}
    		catch (InterruptedException e) {System.out.println(e.getMessage());}  
    		}
    	public void mouseClicked(MouseEvent e) 
    		{
    		for (int i=1; i<=10;i++)
    			{
    			monMobil.setLocation(monMobil.getX()+10, 0);
    			tempPause(200)  ;
    			}
    		}
    	public void mousePressed(MouseEvent e) {}
    	public void mouseReleased(MouseEvent e) {}
    	public void mouseEntered(MouseEvent e) {}
    	public void mouseExited(MouseEvent e) {}	
    }
     
    // --------------------------- panelFond --------------------
    class monPanel extends JPanel 
    {
    	private static final long serialVersionUID = 1L;
    	private BufferedImage myPicture;
     
    	public monPanel(String chemin)
    		{
    		this.setLayout(null);
    		try	{myPicture= ImageIO.read(getClass().getResource(chemin));	}
    		catch (IOException e) {e.printStackTrace();}
    		this.setSize(myPicture.getWidth(),myPicture.getHeight());
    		}
     
    	public void paintComponent(Graphics g) 
    		{
    		super.paintComponent(g);
    		g.drawImage(myPicture, 0, 0, null);
    		}
     
     
     
     
     
    }
    Vous m'excuserez par avance de la "stupidité" de ma demande mais il faut bien que les débutants débutent !
    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 332
    Par défaut
    En effet, ce que vous faites ici ne donnera pas d'effet de glissement car vous manipulez tout dans le même Thread.

    L'idée serait de démarrer un second Thread qui va déplacer votre `monMobil` et redessiner le UI. Et SwingWorker est effectivement idéal car il à été céé pour celà, mettre à jour la vue depuis des tâches en arrière plan.

    Comme vous le dite, "il faut bien que les débutants débutent". Je vous conseille donc d'aller lire la documentation https://docs.oracle.com/javase/8/doc...ingWorker.html et notamment l'exemple avec `PrimeNumbersTask` qui va faire un calcul en arrière plan (comme attendre et calculer la prochaine position) et publier des valeurs intermédiaires (les positions) pour mettre à jour l'UI via la méthode "process".


    Bon amusement

Discussions similaires

  1. [Lazarus] Faire glisser une image du bureau et la déposer sur un TImage
    Par sematimo dans le forum Lazarus
    Réponses: 3
    Dernier message: 11/09/2022, 09h59
  2. Faire glisser une image dans un cadre avec la souris
    Par fab76000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2008, 13h38
  3. [GD] copier une image sur l'autre avec transparence
    Par troumad dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 13/05/2008, 01h13
  4. Faire glisser une image trop grande avec la souris
    Par avogadro dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 28/07/2006, 17h50
  5. Lien vers une image sur un autre serveur
    Par claralavraie dans le forum ASP
    Réponses: 1
    Dernier message: 23/12/2005, 12h40

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