[問題] mouseDraged event的怪現象

看板java作者時間17年前 (2008/05/15 01:23), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
現在正在寫一個用滑鼠拖拉畫布上物件的程式發現了一個怪現象 想請問大家為什麼會這樣 我往同一方向拖拉的時候發現物件會在滑鼠的位置和往回一段距離的地方來回閃動 code大概是這樣的 // instance 為一Component物件 instance.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { instanceMouseDragged(evt); } ... private void instanceMouseDragged(MouseEvent evt) { //debug訊息印出與按鍵按下時的相對位置 System.out.printf("drag pos: %d %d\n", evt.getX(), evt.getY()); //計算物件新的位置 newPos.x = beanLastPos.x + evt.getX() - beanDis.x; newPos.y = beanLastPos.y + evt.getY() - beanDis.y; //把物件擺到新位置 Component target = evt.getComponent(); target.setLocation(newPos); } 當我往右下拖動的時候照道理evt.getX()和evt.getY()的值都應該要一直累加的 但上面debug訊息的輸出卻會像下面這樣 drag pos: 153 64 drag pos: 129 52 drag pos: 155 65 drag pos: 133 56 drag pos: 157 66 drag pos: 135 57 drag pos: 157 67 也就是說會莫名其妙被往回拉 想請問是什麼原因? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.167.126

05/15 02:13, , 1F
一直跳動往往是卡到某些boundary checking的結果
05/15 02:13, 1F

05/15 10:01, , 2F
getX() 是相對座標 ... 可以 getScreenX() 試試看 ...
05/15 10:01, 2F
文章代碼(AID): #18An_-oQ (java)