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 :

Problème déplacement objet


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Par défaut Problème déplacement objet
    Bonjour à tous j'ai actuellement un gros soucis, je souhaite faire déplacer une boule a chaque fois que l'on appuie sur la touche droite du clavier, tout marche sauf le déplacement ... Il me redessine en faite juste à côté la nouvelle balles, ce qui me donne une ligne rouge au finale ...

    Voici le code de mon application :

    UIDebug.java :
    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
    public void tracingWindows() {
    		setTitle("Batak");
    		this.width = (int)this.getToolkit().getScreenSize().getWidth() / 2;
    		this.height = (int)this.getToolkit().getScreenSize().getHeight() / 2;
    		this.setSize(width, height);
     
    		Jbackground Jback = new Jbackground();
    		Jback.setPreferredSize(new Dimension(width, height));
    		Jback.setBackground(Color.WHITE);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		IComponent c = new PlayerFrame(new Point(50, height - 100), new Dimension(50, 50), Jback);
    		Jback.drawComponentList(c);
     
    		this.setContentPane(Jback);
     
    		this.addKeyListener(new keyboardListener());
    		pack();
    		setVisible(true);
    	}
    Jbackground.java :
    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
    public class Jbackground extends JPanel{
     
    	private List<IComponent> components = new LinkedList<IComponent>();
    	public static PlayerFrame pFrame; //Un seul personnage dans le jeux
     
    	public void drawComponentList(IComponent c) {
    		components.add(c);
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponents(g);
    		for (Iterator<IComponent> i = components.iterator(); i.hasNext();) {
    			IComponent c = (IComponent) i.next();
    			c.draw(g);
    		}
    	}
     
    }
    Icomponent.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface IComponent {
     
    	public void draw(Graphics g);
     
    }
    PlayerFrame.java :

    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
    public class PlayerFrame implements IComponent{
     
    		private Point point;
    		private Dimension dim;
    		private Jbackground jpanelCurrent;
     
    		public PlayerFrame(Point aPoint, Dimension aDim, Jbackground aJpanelCurrent) {
    			point = aPoint;
    			dim = aDim;
    			Jbackground.pFrame = this;
    			jpanelCurrent = aJpanelCurrent;
    		}
     
    		public void draw(Graphics g) {
    			g.setColor(Color.RED);
    			g.fillOval(point.x, point.y, dim.width, dim.height);
    		}
     
    		public void move(Point newPoint) {
    			point = newPoint;
    		}
     
    		public Point getPosition() {
    			return point;
    		}
     
    		public Jbackground getJpanelCurrent() {
    			return jpanelCurrent;
    		}
    }
    et keyboardListener.java :

    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
    public class keyboardListener implements KeyListener{
     
    	public void keyPressed(KeyEvent arg0) {
    		parseKeyCode(arg0.getKeyCode());
    	}
     
    	public void keyReleased(KeyEvent arg0) {	
    	}
     
    	public void keyTyped(KeyEvent arg0) {
    	}
     
    	private void parseKeyCode(int code) {
    		switch(code) {
    			case 39:
    				startingThreedMove('r');
    			break;
     
    			case 37:
    				startingThreedMove('l');
    			break;
    		}
    	}
     
    	private void startingThreedMove(final char direction) {
    		Thread t = new Thread()
    	      {
    			public void run()
    	         {
    				Point ac = Jbackground.pFrame.getPosition();
    				Point newPoint = new Point(ac.x + 5, ac.y);
    				Jbackground.pFrame.move(newPoint);
    				Jbackground.pFrame.getJpanelCurrent().repaint();
    				this.interrupt();
    	         }
    	      };
    	      t.start();
    	}
     
    }
    Voilà en espérant que vous puissiez m'aider merci

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    l'instance de Graphics étant recyclé, il te faut nettoyer le fond avant de dessiner la nouvelle position par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void paintComponent(Graphics g) {
    		super.paintComponents(g);
    		Dimension size = getSize();
    		g.setColor(getBackground());
    		g.fillRect(0,0,size.width, size.height);
    		for (Iterator<IComponent> i = components.iterator(); i.hasNext();) {
    			IComponent c = (IComponent) i.next();
    			c.draw(g);
    		}
    	}
    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
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Par défaut
    C'est bon sa marche comme sa Merci, sujet résolu

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Il est plus efficace de définir ton Panel comme opaque (setOpaque(true)) et de laisser super.paintComponent faire le nettoyage. le setOpaque permet à swing de savoir qu'il n'as éventuellement pas besoin de dessiner ce qui se trouve derrière ton panel (comme le fond de la fenêtre) puisque ce sera effacé.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Par défaut
    En mettant mon JPanel a setOpaque(true) cela ne fonctionne pas

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par reben Voir le message
    En mettant mon JPanel a setOpaque(true) cela ne fonctionne pas
    Parce que tu as aussi une erreur ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	public void paintComponent(Graphics g) {
    		super.paintComponents(g);
    Ce devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    paintComponent affiche le panel (y compris le fond si il est opaque). paintComponents itère sur le composants à l'intérieur du panel (tu n'en a pas) pour les dessiner.

Discussions similaires

  1. Problème avec objet fermé
    Par Mvu dans le forum ASP
    Réponses: 4
    Dernier message: 22/09/2005, 11h30
  2. Réponses: 13
    Dernier message: 01/09/2005, 16h09
  3. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 12h30
  4. Problème d'objet attendu
    Par odelayen dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/02/2005, 11h27
  5. problème déplacement entre formulaire
    Par estancha dans le forum IHM
    Réponses: 6
    Dernier message: 07/10/2004, 16h22

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