2012-01-28 6 views
0

마우스를 클릭하고 누른 상태로 유지 (예 : 마우스 드래그) 할 때 상자가 빨간색으로 변하는 그리드가 있습니다. 아래 코드가 있습니다. 마우스를 끌 때. MouseDragged 메서드가 제대로 호출되지만 하나의 상자가 빨간색으로 변하고 이후에는 아무 것도 나타나지 않습니다 (메서드가 여전히 호출되었지만). 어떤 아이디어? 나는 분명했다.MouseListener MouseDragged 예상대로 작동하지 않습니다.

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

같은 뭔가가 필요 : 감사

public static class DragListener implements MouseMotionListener 
{ 



    @Override 
    public void mouseDragged(MouseEvent me) { 


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

      current.setBackground(Color.RED); 

    } 
    } 

이 그리드의 정의입니다 자바가 드래그를 인식하는 방식 때문에. 자바는 다음과 같은 알고리즘에 의해 끌어 인식합니다 하나의 구성 요소 내에서

"C"

내부의 "C"
  • 은 마우스 후 "C"내부 주위를 이동하는 동안
    1. 마우스를 누를 때 -이

    두 번째 구성 요소는 궁극적으로 하나의 구성 요소를두고 두 번째 구성 요소를 입력하기 때문에 mousePressed 동작을 등록하지 않으므로 마우스를 드래그한다고 생각하지 않습니다. 마우스를 당신의 "실험실"JPanels (mousePressed()) 안에 넣을 때 GridPane에 알려주는 플래그를 유지 한 다음 mouseMoved() 메서드를 구현하여 플래그와 색상이 설정되어 있는지 확인하십시오. 그런 다음 드래그를 중지 한 후 채색을 계속하지 않도록 플래그를 다시 정상 상태로 재설정하려면 mouseReleased()를 구현하십시오. 자바에서 마우스 움직임에 대한 추가 정보를 원하시면

    ,이 링크를 체크 아웃 : http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

  • 관련 문제