我是JLayeredPane
的新手,所以我认为部分归咎于为什么我无法理解
为什么鼠标按下/拖动/释放方法不能像我拖动时那样执行
一个txtUser
项目(附有听众;见底部)。
使用给定的代码段。我拖动时只执行userMousePressed
。
然而, IF 注释掉了行layeredPane.add(userDragLetter, LayeredPane.DRAG_LAYER)
,所有3个鼠标事件都被识别并正确执行。
private void userMousePressed(MouseEvent e){
curUserCell.index = interpIndex(e.getXOnScreen(),ulcUser.x,txtUser[0].getWidth());
curUserCell.background = txtUser[curUserCell.index].getBackground();
curUserCell.content = txtUser[curUserCell.index].getText().charAt(0);
txtUser[curUserCell.index].setBackground(B_DRAGGING);
txtUser[curUserCell.index].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
int w = Integer.parseInt(e.getComponent().getName());
userDragLetter = null;
Component c = txtUser[w];
parentLocation = c.getParent().getLocation();
xAdjustment = parentLocation.x - e.getX();
yAdjustment = parentLocation.y - e.getY()- gamePanel.getHeight();
userDragLetter = (JLabel)c;
userDragLetter.setPreferredSize(new Dimension(CELLSIZE, CELLSIZE));
userDragLetter.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);
//////////////////////////////////////////////////////////////////////////////////////
// If I comment out the line below, `userMouseDragged` & `userMouseReleased` DO execute
layeredPane.add(userDragLetter, JLayeredPane.DRAG_LAYER);
/////////////////////////////////////////////////////////////////////////////////////
}
此方法无法使用以上代码执行,并且':
private void userMouseDragged(MouseEvent me) {
System.out.print("User mouse dragged entered..."); // Doesn't print
...
}
此方法无法执行:
private void userMouseReleased(MouseEvent e)
{
System.out.println("User mouse released entered..."); // Doesn't print
...
}
以下是我如何分配鼠标监听器:
txtUser[k].addMouseMotionListener
(
new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent evt)
{
userMouseDragged(evt);
}
}
);
txtUser[k].addMouseListener
(
new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
userMousePressed(e);
}
public void mouseReleased(MouseEvent e)
{ //after dragging user letter
userMouseReleased(e);
}
}
);
(我试图做的是物理拖动 - 即,鼠标指针字面指向 - 来自txtUser[...]
的一个字母,因为它被拖到游戏网格中。我和#39; m不接近,但是它已经坏了!如果我注释掉layeredPane
行,程序将一如既往地工作。)
(a)为什么拖动鼠标并忽略鼠标释放事件?
(b)如何使拖拽和释放的事件触发他们的方法?