2014-06-16 2 views
2

저는 AWT/Swing for Java에 익숙하지 않고 두 점과 관련 세그먼트를 그려야합니다. 제가 작성한 코드는 매우 간단합니다 :Java 그래픽 API를 사용하는 데 어려움이 있습니다.

g.fillOval(100, 100, 10, 10); 
    g.fillOval(200, 500, 10, 10); 
    g.drawLine(100, 100, 200, 500); 

그러나 아래 이미지에서 볼 수 있듯이 예상대로 작동하지 않습니다. 이미지를 게시할만한 평판이 나지 않으므로이 부분을 확인하시기 바랍니다. Dropbox link.

enter image description here

오전 나는 세그먼트의 끝 지점 안에해야한다고 말할 때 내가 잘못? 내가 뭘 잘못하고 있는지 모르겠다./ 고마워.

답변

2

문제는 타원의 x 및 y 점이 그것을 둘러싸는 직사각형의 왼쪽 위 모서리이고 선이이 모서리에서 끝나는 것입니다. 대신에 타원의 중심에서 선이 끝나야합니다.

g.drawLine(105, 105, 205, 505); 

참고 : :이 센터는 당신에게 뭔가를주는 왼쪽 상단 모서리에 타원형의 폭과 높이를 1/2 추가하여 쉽게 계산할 수있다 가능하면 "마법"번호를 피할 수 있습니다.

예를 들어,

private int r = 5; 
private int x1 = 100; 
private int y1 = 100; 
private int x2 = 200; 
private int y2 = 500; 


// elsewhere in your paintComponent method: 
g.fillOval(x1, y1, 2 * r, 2 * r); 
g.fillOval(x2, y2, 2 * r, 2 * r); 
g.drawLine(x1 + r, y1 + r, x2 + r, y2 + r); 
+0

타원의 x와 y를 칠할 때 왼쪽 위 모서리가 아닌 가운데가되도록해야합니다. 귀하의 답변 주셔서 감사합니다, 그것은 내 문제를 해결. – Alex

+0

@Alex : 기꺼이 도와 줬습니다. Java API가 메소드 매개 변수가 의미하는 바를 정확하게 알려주는 곳입니다. –

3

내가 그리기 동그라미와 함께 작동, 나는 중심점과 반경을 지정하는 것을 선호합니다. 이 메서드는 fillOval 또는 drawOval 메서드를 조정하여 중심점과 반지름을 사용합니다.

public void drawCircle(Graphics g, int x, int y, int radius) { 
    g.drawOval(x - radius, y - radius, radius + radius, 
      radius + radius); 
} 
관련 문제