2013-12-13 2 views
1

이미지 (JLabel)에 사각형을 그릴 수있는 Java 응용 프로그램을 작성하려고합니다. 문제는 직사각형이 나타나지 않아야한다는 것입니다.사각형이 아닌 위치에 표시

마우스를 드래그
public void mouseClicked(MouseEvent e) { 
    System.out.println("X:"+e.getX()+"Y:"+e.getY()); 
} 

I : 그것은

나는 X를 얻을와 y는 다음과 같이 시작 지점 좌표 .. 화면이 아닌 이미지와 구성 요소의 왼쪽 상단 모서리에서 시작 끝 x, y를 얻고 repaint를 호출하십시오.

public void mouseDragged(MouseEvent e) { 
     if(e.getSource().equals(label)) { 
      System.out.println("X:"+e.getX()+"Y:"+e.getY()); 
      endX = e.getX(); 
      endY = e.getY(); 
      repaint(); 
     } 
    } 

그래서 어떻게하면 레이블에 상대적인 X를 얻을 수 있습니까? 창문이 아니라? 0,0이 레이블의 시작이되기를 원합니다.

마우스 리스너는 라벨에 추가됩니다

label.addMouseListener(this); 
label.addMouseMotionListener(this); 

레이블 레이아웃 porpuse에 대한 패널에 추가됩니다.

업데이트 : 좌표를 인쇄 해 보았습니다. 그들은 괜찮은 것 같습니다 ..하지만 사각형은 여전히 ​​내가 원하는 곳이 아닙니다. JFrame에 그려져있는 것 같습니다. 라벨에 무엇을 칠하나요?

전유 : 문제는 결코 예상하지 못했던 부분이었습니다. 방금 내 레이블에서 그래픽 객체를 꺼내서 그려 봤습니다.

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 물론 부모 구성 요소가 아닌 레이블에 리스너를 추가하는 것도 한 가지 방법 일 수 있습니다. –

답변

4

의 폭과 높이를 고려할 필요가 그래서는 라벨에 X와 Y의 상대를 얻을 어떻게해야합니까? 창문이 아니라?

나는 MouseListener를 창에 추가하는 것처럼 들리 네.

레이블에 MouseListener를 추가하면 마우스 포인트가 레이블에 상대적입니다.

편집 :

어떻게 라벨에 뭔가를 그리는합니까?

JLabel의 paintComponent() 메서드를 재정의합니다.

Custom Painting Approaches에서 JPanel에 직사각형을 그리는 예제를 확인할 수도 있습니다. 이 코드는 JLabel에서 동일합니다. DrawOnComponent 예제는 볼 코드입니다.

여전히 문제가 있으면 SSCCE를 게시하고 사람들이 자신이하는 일을 추측하게 만드는 것을 중단하십시오.

+0

** label.addMouseListener (this); ** ** label.addMouseMotionListener (this); ** 레이블에 추가 중입니다. – Bebras

0

당신은 그림

endX = e.getX() + (figureWidth/2); 
endY = e.getY() + (figureHeight/2); 
+0

"그림"이 의미하는 바를 이해하지 못했습니까? – Bebras

관련 문제