作者sbrhsieh (十年一梦)
看板java
标题Re: [问题] mouseDragged取得的座标会跳动
时间Tue Oct 29 16:19:30 2013
※ 引述《kenotic (弱智)》之铭言:
: 最近碰到一个怪问题
: 程式码改自一位老师放在网站上的资料:
: http://tung.tsu.edu.tw/lecture/java/txt/Ch07/J7_6_4.txt
: 就是我为一个label设定图片icon
: 并且将该label放在panel里面,让label能够被拖曳
: 但当label被拖曳 => 放开滑鼠 => 拖曳 => 放开滑鼠...重复此动作4、5个循环
: 换言之就是drag release动作重复几次後,我察觉被拖曳的label图形开始跳动
: 於是我用System.out.println去印出mouseDragged里面用e.getX()取得的座标
: 我发现当图片开始跳动後,e.getX()取得的座标也跟着跳动
: (换言之,图片会正常地被拖曳一段距离後开始慢慢跳动,接着剧烈跳动到消失
: getX()取得的座标会先从正负几千开始跳,接着跳到正负几亿)
: 那段的程式码如下:
: class CDrawPicB extends MouseMotionAdapter {
: public void mouseDragged(MouseEvent e) {
: isDrag = true;
: if(isInOtherBlock) return;
: drag_x = e.getX();
: drag_y = e.getY();
: up_left_x = up_left_x + (drag_x - press_x);
: up_left_y = up_left_y + (drag_y - press_y);
: cursor_x = up_left_x + press_x;
: cursor_y = up_left_y + press_y;
: iconLabel[new_block_location].setLocation(
: up_left_x, up_left_y);
: }
: }
: println出来的drag_x一开始都很稳定,数字顶多正负2在跑
: 但拖曳到後来数字渐渐愈跳愈夸张(正负几亿)
: 整段程式码在这 http://tinyurl.com/mnpna2r
: 初学者,写法比较差
: 上网google试图寻找答案,然而依然没有头绪
: 还请多提点指教 感谢
不清楚 up_left_x, up_left_y 的意义,所以较难去探究你的演算法的错误点。
lable 本身的位置是相对它所在的 container,而 mouseDragged event 所带的
mouse 位置是相对於发出 event 的 component(假如 CDrawPicB instance 是
注册在 label 身上,那麽就是相对於 label)。
正确的作法是将滑鼠的位移量(drag_x - press_x, drag_y - press_y) 与 label
当下的位置去计算出 label 的下一个位置并移动之。
需要程式码参考的话,可参考这一篇:
http://www.javaworld.com.tw/jute/post/view?bid=5&id=142635&sty=3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.172.187.201
1F:推 kenotic:感谢 问题解决了(〞︶〝*) 10/29 23:28