Bloquage de coordonnée d'une image en java ?

Résolu
fnxsawyer Messages postés 3 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 29 janvier 2010 - 28 janv. 2010 à 22:13
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

2 réponses

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
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();
}
3
fnxsawyer Messages postés 3 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 29 janvier 2010
29 janv. 2010 à 18:07
Re, à tous,

personne n'a d'idée ou personne n'a compris ?
0
Rejoignez-nous