문제

저는 캔버스에 그래프 데이터 구조를 그릴 수 있는 Java 애플릿을 만들려고 합니다.노드를 생성하려는 위치를 클릭하고 노드를 클릭하여 연결하면 됩니다.문제는 내가 그것을 얻을 수 없다는 것이다 paint() 올바르게 행동하는 방법.그래프 내부의 그래프(및 캔버스의 사각형)에 새 노드를 추가합니다. mousePressed(MouseEvent e) 사용하는 방법,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

창 크기를 조정한 후 채워진 직사각형이 모두 사라질 때까지 모든 것이 잘 작동합니다.페인트 메서드를 빈 메서드로 재정의했지만 여전히 같은 일이 발생합니다.사용자가 마우스를 사용하여 상호 작용할 때까지 어떤 직사각형이 존재하는지 알 수 없기 때문에 페인트() 내부에 fillRect 명령을 추가할 수 없습니다.

어떻게 사용할 수 있나요? g.fillRect() 마우스 리스너 메소드 내부에 넣고 고정시키시겠습니까?

도움이 되었습니까?

해결책

문제는 당신이 그리는 곳이 지속되지 않는다는 것입니다. 언제든지, 당신은 당신이 그린 모든 것을 잃을 수 있습니다. 페인트 (그래픽) 방법은 이런 일이 발생할 때 호출됩니다. 이런 일이 발생할 때마다 전체 사진을 다시 칠해야하거나 필요에 따라 캔버스를 떼어 내고 내용물을 애플릿의 그래픽에 복사해야합니다.

이미지를 작성하고 그리는 방법은 다음과 같습니다.
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

그런 다음 페인트 방법에서 그래픽의 DrawImage (...) 메소드를 사용하여 만든 이미지를 표시하십시오.

다른 팁

제가 이 글을 올바르게 읽고 있는지는 모르겠지만, 나중에 Paint() 메서드가 호출될 때 칠할 변수에 마지막 클릭 위치를 저장하면 안 될까요?

창 크기 조정 액션 리스너를 무시하고 호출해야합니다. 그것의 내부에서 다시 칠하십시오.

그래픽은 일시적입니다. 지역이 더러워지면 다시 칠할 것입니다.

가장 좋은 방법은 완충학을 만들고, 무질의에 페인트를 페인트하고 전화를 다시 칠하는 것입니다.
페인트가 호출되면 전달 된 그래픽 객체에 이미지를 그립니다. 이렇게하면 사각형을 저장할 필요가 없으며 성능을 향상시키는 버퍼가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top