Voici mon problème: j'ai un jpanel qui a trois panneaux en elle. un panneau verticalseperator, un panneau chatouput et un panneau chatinput. la principale JPanel, chatpanel, met en œuvre MouseMotionListener, et a le code suivant:jtextarea événement de souris écrasant les conteneurs événement souris
public void mouseMoved(MouseEvent e) {
int y = e.getY();
//change cursor look if hovering over vertical spacer
if(y >= (int)(verticalPanelSeperator.getLocation().getY()) && y <= (int)(verticalPanelSeperator.getLocation().getY() + verticalPanelSeperator.getHeight())) {
setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
}
else {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
public void mouseDragged(MouseEvent e) {
//vertical spacer can be draged up/down to change height of input/output areas
if(getCursor().getType() == Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR).getType()) {
int edge = (int)this.getLocation().getY();
int cur = e.getY();
int height = this.getHeight();
output.setHeightPercent((((double)(cur-edge))/height));
output.componentResized(new ComponentEvent(this, 1));
input.setHeightPercent((((double)(height-cur-edge))/height));
input.componentResized(new ComponentEvent(this, 2));
e.consume();
}
}
le problème est que, pour une raison quelconque, lorsque vous déplacez la souris sur l'verticalpanelseperator, il se transforme en un curseur de redimensionnement, mais que vous vous déplacez vers le haut, sans faire glisser, il reste comme le curseur de redimensionnement. De plus, à partir de l'instruction print, lorsque la souris monte dans le chatoutput, la valeur de e.getY() ne s'incrémente pas, elle reste dans les limites du verticalseperatorpanel. C'est comme le mouselistener par défaut de chatoutput qui substitue celui sur le chatpanel et ne fait rien. Quelqu'un peut-il me dire ce qui se passe ici et comment résoudre ce problème?