2014-02-27 2 views
0

안녕하세요, 여기 새로운 것이고 약간의 경험이 프로그램되어있어 정말 도움이 필요합니다. 무엇을하려고하는지는 기본적으로 사각형 마우스를 클릭하고 드래그 할 때 바탕 화면에서 수행 할 수있는 작업입니다. 문제는 새로운 사각형을 시작할 때 이전 매개 변수를 지우는 방법이나 "거꾸로"그릴 방법을 모른다는 것입니다.마우스로 사각형을 그리는 법

public void paint (Graphics j){ 
super.paint(j); 
    j.drawRect(x,y,z,w); 

} 

private void formMousePressed(java.awt.event.MouseEvent evt) {         
    x=evt.getX(); 
    y=evt.getY(); 

    repaint();  
} 

private void formMouseDragged(java.awt.event.MouseEvent evt) {         
    z=evt.getX(); 
    w=evt.getY(); 

    repaint(); 

}    
+0

에, 나는이 전체 코드 : 문제가 정확히 무엇이다 확실하지 않다 승, 광장 시도해보십시오 formMouseReleased 방법을 추가하고 X, Y, Z의 설정을 재설정에 관해서는

? 이전 직사각형이 남아 있습니까? 이 클래스는 어떤 클래스를 확장합니까? 당신은 어딘가에'MouseAdapter'를 가지고 있습니까? – Joffrey

+0

당신의 바탕 화면 배경 무늬를 그리는거야? ** :) ** –

+0

아니, 전체 코드가 아니지만 핵심은, 문제는 내가 어떻게 opositte 방향으로 그릴 지 모르겠다. – user3362366

답변

1

drawRect의 서명은 drawRect(int x, int y, int width, int height)입니다. 사각형의 왼쪽 위 모서리와 너비와 높이를 계산해야합니다.

왼쪽 상단 모서리는 (min(x, z), min(y, w))입니다. 우리가 함께

j.drawRect(Math.min(x, z), Math.min(y, w), Math.abs(x - z), Math.abs(y - w)); 

왜이 작업을 수행하려고 얻을
폭은 abs(x-z)과 높이입니다 abs(y-w)

이 퍼팅? 그럼 당신은 2 점을 받았습니다. 2 점으로 정사각형 (대각선)을 결정할 수 있다는 것은 잘 알려진 사실입니다. 첫 번째 문제는 주어진 포인트를 자바가 좋아하는 입력으로 변환해야한다는 것이다. 이 경우, 먼저 왼쪽 상단 구석이 필요합니다. 당신은 당신이 가지고있는 어떤 점이 그 구석인지 알지 못합니다. 실제로는 그들 둘 다가 아닐 수도 있습니다.

그래서 무엇 합니까 우리는 왼쪽 상단 모서리에 대해 알고 계십니까? x 값은 사각형에있는 가장 작은 x 값입니다. 우리는 또한 주어진 두 지점 중 적어도 하나가 같은 가장자리에 있다는 것을 알고 있습니다. 이 정보를 사용하여 왼쪽 상단 모서리의 x 좌표가 2 점의 최소 x 값이라는 것을 알 수 있습니다. 또는 min(x, z). 동일한 절차를 사용하여 y 좌표를 찾습니다.

이제 너비와 높이는 간단합니다. 너비는 오른쪽 가장자리 - 왼쪽 가장자리입니다. 우리는 어느 쪽이 오른쪽이고 어느 쪽이 왼쪽인지는 모르지만 그것은 중요하지 않습니다. 우리가 차이의 절대 값을 취하면 항상 당신에게 포인트 사이에 긍정적 인 차이를 줄 것입니다. 이 경우 abs(x-z)입니다. 과정은 높이에 대해 동일합니다. 사실 0

+0

감사합니다. 그게 효과가 있다면, 나는 그 명령에 대한 더 자세한 설명이 문제가되지 않았 으면 좋겠다. – user3362366

+0

@ user3362366 왜 작동하는지 설명하는 몇 문장을 썼습니다. 희망이 도움이됩니다! – Cruncher

0

난 당신이 매개 변수를 같은 뭔가 다시 설정하는 방법 만들 수 있습니다 생각 : 당신의 마우스 클래스의 무효 modifyMouse() // 당신의 매개 변수를 = 0

내가 시도 할 수 있습니다 여기에 전체 코드입니다 질문을 명확하게하면 더 나은 도움을 줄 수 있습니다.

+0

그래도 도움이되었지만 아직 그릴 수는 없습니다. 반대 방향, 나는 변수의 자리를 바꾸는 지시가 필요하다고 생각한다. x와 y는 w와 z (즉, 너비와 높이)입니다. – user3362366

+0

@ user3362366 내 대답을보세요 – Cruncher

관련 문제