Re: [問題] mouseDragged取得的座標會跳動
※ 引述《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
推
10/29 23:28, , 1F
10/29 23:28, 1F
討論串 (同標題文章)