2012-01-28 129 views
0

當我離開單擊按住並移動光標(即:拖動鼠標)時,我有一個網格,其中框變爲紅色(我基本上想繪製網格)。我有下面的代碼。當我拖動鼠標時。 MouseDragged方法被正確調用,但是隻有一個框變爲紅色,並且在我之後拖動時(儘管該方法仍然被調用),沒有任何反應。有任何想法嗎 ?希望我清楚。由於MouseListener MouseDragged不按預期方式工作

public static class DragListener implements MouseMotionListener 
{ 



    @Override 
    public void mouseDragged(MouseEvent me) { 


      JPanel current =(JPanel)me.getSource(); 

      current.setBackground(Color.RED); 

    } 
    } 

這是網格的定義:

public static class GridPane extends JPanel { 

    public GridPane(int row, int col) { 
     int count = 0 ; 
     setLayout(new GridLayout(row, col)); 
     setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); 

     for (int i = 1; i <= (row * col); i++) { 

      JPanel lab = new JPanel(); 

      lab.setEnabled(true); 
      lab.setBackground(Color.WHITE); 
      lab.setPreferredSize(new Dimension(3, 3)); 
      lab.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
      lab.addMouseMotionListener(new DragListener()); 
      lab.addMouseListener(new ClickListener()); 
      lab.setName(count+""); 
      ++count; 

      add(lab); 
     } 
    } 
} 
+0

你只需要跟蹤的位置,然後設置在鼠標上紅色網格框。我猜測它只是在你點擊鼠標時獲取初始鼠標位置,而不是按住鼠標左鍵時更新的鼠標位置。 – theDazzler 2012-01-28 02:13:30

+0

嗯,這是一個有效的點。謝謝。關於如何才能做到這一點的任何提示?即跟蹤鼠標的位置? – Cemre 2012-01-28 02:15:38

+1

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-01-28 02:16:57

回答

0

你需要像這樣

public MouseMotionEventDemo() { 
    addMouseMotionListener(this); 
    setVisible(true); 
    } 

    public void mouseMoved(MouseEvent me) { 
    mX = (int) me.getPoint().getX(); 
    mY = (int) me.getPoint().getY(); 
    repaint(); 
    } 

    public void mouseDragged(MouseEvent me) { 
    mouseMoved(me); 
    } 
0

我覺得你的問題是從事實,你拖動鼠標所產生在多個JPanel上,以及由於Java如何識別拖動。 Java的識別通過下面的算法拖動:

在一個單獨的部件「c」:

  1. 用鼠標按下而內「C」
  2. 鼠標,然後裏面的「C」搬來搬去 - 這構成了「C」

內拖動因爲你的鼠標離開最後一個組件,進入按下時,第二組分從未註冊的動作的mousePressed第二成分,所以它不會認爲你在拖動鼠標。我建議在任何「實驗室」JPanels(mousePressed())內按下鼠標時,保持一些標誌告訴你的GridPane,然後實施mouseMoved()方法檢查該標誌和顏色是否已設置。然後實現mouseReleased()將標誌重置爲正常狀態,以便在停止拖動後不會繼續着色。

有關Java中的鼠標移動的詳細信息,請訪問此鏈接: http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html