Re: [問題] mouseDragged取得的座標會跳動

看板java作者 (十年一夢)時間10年前 (2013/10/29 16:19), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1IRs-MWu (java)
討論串 (同標題文章)
文章代碼(AID): #1IRs-MWu (java)