Bloquage de coordonnée d'une image en java ? [Résolu]

Messages postés
3
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
29 janvier 2010
- - Dernière réponse : fnxsawyer
Messages postés
3
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
29 janvier 2010
- 29 janv. 2010 à 20:06
Bonjour à tous,

Je suis en train de développer une application qui requiert de redessiner tous les composants les plus simples.
Je suis en train de redessiner une barre de défilement verticale.

J'ai donc créé un JPanel dans lequel à l'aide de la fonction "paintComponent(Graphics g)" je dessine une image en fond. Puis j'ajoute un JLayeredPane pour pouvoir ajouter à l'intérieur même de ce JPanel un autre JPanel qui lui représente la barre de défilement qui suit la souris.

Jusque là tout va bien ;p
Grâce aux systèmes évènementielle "MouseMotion" et "MouseListener", j'arrive à déplacer l'image facilement grâce à la modification d'une variable quand je déplace la souris. Cette variable étant affecté au coordonné en Y de l'image puisque c'est une barre verticale :

Fonction "PaintComponent" dont la barre bouge sur l'axe des ordonnée grace à la variable Y

protected void paintComponent(Graphics g){
g2d = (Graphics2D)g;

// Lissage du texte et des dessins
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

//Button Mover
g2d.setColor(Color.decode("#373737"));

g2d.fillRoundRect(x, y, width, (int)BarHeight, 5, 5);


}


La variable Y est modifiée dans cette fonction :

//Evenements
private void Evenements(){

this.addMouseListener(new MouseAdapter(){

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
oldY = e.getY();
}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
oldY = e.getY();
}

});

this.addMouseMotionListener(new MouseMotionAdapter(){

@Override
public void mouseDragged(MouseEvent e) { //Evenement cliquer et déplacer


if((e.getY()-oldY) >= MarginBar && (e.getY()-oldY) <= (WindowHeight-(MarginBar+BarHeight))){

y = (e.getY()-oldY);

}




repaint();
parent.repaint();
}

@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub

}

});

}


Mais mon problème est quand je veu limiter le déplacement de ma barre sur l'axe des ordonnées pour pas qu'elle dépasse les bords :


if((e.getY()-oldY) > = MarginBar && (e.getY()-oldY) <= (WindowHeight-(MarginBar+BarHeight))){


Ici, en effet lorsque je déplace ma souris l'image s'arrête belle et bien, mais parfois quand je vais vite à déplacer la souris, l'image se bloque avant, ou après la limite donnée. sans aucune raison puisqu'elle se débloque parfois.
Bizarre.

Serait-ce un problème de rafraichissement (repaint) dont je tient à signaler que "parent.repaint()" représente l'image en fond.
Personnellement je ne pense pas.

Par contre je me demande s'il ne faudrait pas jouer avec un "timer" pour donner une fluidité dans le mouvement qui fais que la souris est récupéré par la fonction avec une grande fluidité pour ainsi valider la condition ..

if((e.getY()-oldY) >= MarginBar && (e.getY()-oldY) <= (WindowHeight-(MarginBar+BarHeight))){

...aisément ??

Quelqu'un à une idée s'il vous plait ? je ne vois pas plus loin !

Merci à vous d'avoir lu.
Cordialement, Vincent
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
29 janvier 2010
3
Merci
Merci à ceux qui ont lu, mais j'ai enfin trouvé :s

En faite suffisait de mettre un "else" sinon le blocage se faisait mais un peu avant ou un peu après la bordure
Quel con ! :s

voici le nouveau code :


@Override
public void mouseDragged(MouseEvent e) { //Evenement cliquer et déplacer


if((e.getY()-oldY) >= MarginBar && (e.getY()-oldY) <= (WindowHeight-(MarginBar+BarHeight))){
y = (e.getY()-oldY);
}else if((e.getY()-oldY) <= MarginBar){
y = MarginBar;
}else if((e.getY()-oldY) >= (WindowHeight-(MarginBar+BarHeight))){
y = (WindowHeight-(MarginBar+(int)BarHeight));
}


repaint();
parent.repaint();
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fnxsawyer
Messages postés
3
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
29 janvier 2010
0
Merci
Re, à tous,

personne n'a d'idée ou personne n'a compris ?
Commenter la réponse de fnxsawyer