2012-01-28 17 views
0

マウスをクリックして保持して移動すると、ボックスが赤くなります(基本的にグリッドを塗りたい)。私は以下のコードを持っています。私はマウスをドラッグします。 MouseDraggedメソッドは適切に呼び出されますが、1つのボックスだけが赤色になり、その後ドラッグしても何も起こりません(メソッドはまだ呼び出されますが)。何か案は ?私ははっきりしていたと思う。おかげ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

+0

これは有効なポイントです。ありがとう。どのように私はそれを行うことができます上の任意のヒント?つまり、マウスの位置を追跡しますか? – Cemre

+1

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

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がドラッグを認識する方法のために。単一成分「C」内

:Javaは、以下のアルゴリズムによってドラッグ認識

  1. 内部「C」
  2. マウスは、次いで、「C」の内側の周りに移動させながら、マウスが押されている - このあなたのマウスは、最終的に一つの成分を残し、押している間、第二成分が決してのmousePressedアクションを登録していない第二の成分が入っているので、「C」

内のドラッグ構成するので、それはあなたがマウスをドラッグしているとは思いません。私はマウスがあなたの "ラボ" JPanels(mousePressed())の中で押されたときにあなたのGridPaneに指示するいくつかのフラグを維持し、mouseMoved()メソッドを実装してフラグと色が設定されているかどうかを確認することをお勧めします。その後、ドラッグを停止した後に色付けを続行しないように、mouseReleased()を実装してフラグを通常の状態に戻します。 Javaでのマウスの動きの詳細情報については

、このリンクをチェックアウト: http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

関連する問題