2011-10-07 3 views
1

디자인 프로젝트가 있는데, 마우스를 사용하여 자바로 지그재그를 그려야합니다. 우선, 내가 사용하고의 MouseListener와의 mouseClicked 방법에, 나는 사용자가 클릭하는 모든 포인트를 수집 : 여기 자바에서 지그재그 그리기

public void mouseClicked(MouseEvent e){ 
    if(isAbleToDraw){ 
    corners[points]=e.getPoint(); 
     points++; 
     repaint(); 
    } 
} 

나는 사용자가 ""그리기 "를 클릭 여부를 확인하기 위해 부울"isAbleToDraw "를 사용 그리기 중지 "버튼을 클릭하십시오. 그리고, 나는이 같은 지그재그을 그릴 : 그것을 내가 클릭 할 때

super.paintComponent(graph); 
Graphics2D g = (Graphics2D) graph; 
g.drawLine(corners[i].x, corners[i].y, corners[i+1].x, corners[i+1].y); 

마지막으로, 문제는, 지그재그을 그린 후 버튼 "을 그리기 중지"를 선택한 후 다시 버튼을 "그리는"를 클릭 한 후 왼쪽 끝에서 선을 그립니다. 즉, 나는 2 개의 다른 지그재그를 그릴 수 없다.

문제를 해결하는 방법에 대한 아이디어가 있으십니까?

답변

1

냄새는 숙제를 좋아합니다.

사용자가 그리기를 중지해도 배열이 지워지지 않습니다. 새 그림의 첫 번째 점을 클릭하면 이전 그림의 마지막 점이 여전히 배열의 끝에 있으므로 페인트 기능이 충실하게 선 사이에 선을 그립니다. 그리기를 중단 할 때 배열을 지우면 원하는 방식으로 동작해야합니다.

+0

그것은 큰 프로젝트입니다. 단지 작은 부분 일뿐입니다. :) 그렇습니다. 배열을 지우지는 않지만 할 때 더 이상 선을 그리지 않고 null 포인터 예외를 던질 것입니다? – ozgen

+0

NPE는 배열을 역 참조하기 전에 배열이 비어 있는지 점검하여 피할 수 있습니다. 다른 선이 사라지는지 여부는 도면이 누적인지 또는 블랭킹인지에 따라 다릅니다. @ ninesided의 대답은 (더 복잡하지만) 더 나은 해결책입니다. –

2

사용자가 두 개 이상의 지그재그를 그려 화면에서 볼 수있게하려면 Collection 포인트 배열을 사용할 수 있습니다. 사용자가 "그리기"버튼을 클릭 할 때마다 컬렉션에 새 배열을 추가하고 새 배열을 활성 배열로 만듭니다. mouseClicked에서 사용자가 활성 점 배열에 클릭하는 점을 추가 할 수 있으며, 하나의 지그재그 그리기가 아니라 배열 컬렉션을 반복하여 모두 그릴 수 있습니다.

+0

조언을 주셔서 감사합니다. – ozgen

+0

좋아, ArrayList를 만들고 당신이 작성한 단계를 따라 갔다. 그러나 "그리기"버튼을 누르면 이전 그림이 화면에서 사라집니다. 내가하는 방법은 다음과 같습니다. if (e.getSource() = draw) { \t \t \t Point [] newZigzag = new Point [200]; \t \t \t (drawing.getMyArrayList()). add (newZigzag); \t \t \t drawing.setActiveArray (newZigzag); \t \t \t drawing.setAbleToDraw (true); \t \t \t \t \t – ozgen

+0

'repaint'에서 무엇을하고 있습니까? – ninesided

관련 문제