2013-10-13 1 views
2

캔버스가 있고 JButton 클릭을 기반으로 사각형을 그립니다. 즉 그래픽 G 다른 방법으로

private void jb_drawActionPerformed(ActionEvent evt) {           
    // draw a rectangle method 
}  

에 따라서

는 기본적으로, 어떻게 그 방법 고통 (그래픽 g) thingamagic을 encorporate합니까? 사각형을 객체로 만들고 해당 객체에서 "렌더링"메서드를 호출해야합니까? 그렇다면 누군가가 혀를 연결할 수 있습니까?

private void jb_drawActionPerformed(ActionEvent evt) {           
    myrectange.render(x,y); // ???? 
} 
+0

절대 페인트 (그래픽 g)'를 호출하려고 '자신이 항상이 위임 'repaint'에 대한 호출. 1)'jb_drawActionPerformed' 메소드에서'repaint()'를 호출하십시오. 2)'paintComponent (Graphics g)'를 오버라이드하고 그 메소드에서 사각형을 페인트합니다. 첫 번째 호출은 결국 두 번째 호출을 트리거합니다. Btw, 당신은 항상'paintComponent'를 무시하고'paint (Graphics g)'를 오버라이드해서는 안됩니다. –

답변

4

일반적인 설명 및 권장
  • 한 가지 방법

은 : 점점 그래픽이 BufferedImage의 오브젝트로부터 BufferedImage의에서 그린 다음 JComponent의의에 BufferedImage를 그릴의 paintComponent 방법 (JPanel의의의?).
  • 이렇게하면 BufferedImage에서 직접 가져온 Graphics 객체를 사용하여 드로잉을 수행합니다.
  • 이 Graphics 객체를 처리 할 때는이 객체를 폐기해야합니다.
  • 실제 그림은 JPanel의 paintComponent(...) 메서드에서 수행됩니다 (아래 참조).
  • 또 다른 방법은 클래스 필드를 변경하고 그림을 그릴 때 JPanel의 paintComponent 메소드가 해당 필드를 사용하도록하는 것입니다. 예를 들어, 여러 사각형을 그리는 경우 ActionListener에 ArrayList<Rectangle>이라는 추가 항목을 만들고 repaint()을 호출하고 paintComponent(...) 메서드를 List에 반복하여 그리는 사각형을 통해 반복합니다.
  • paintComponent(...) 메서드는 결코 직접 호출되지 않으며, 대신 repaint()을 호출하여 JVM에 호출하는 것이 좋습니다.
  • JVM에서 사용자에게 부여한 Graphics 객체 (예 : paintComponent(Graphics g) 매개 변수로 전달 된 Graphics 객체)를 처리하지 마십시오.

  • 링크

    +0

    감사합니다! 매우 도움이된다 – Killerpixler

    +0

    @Killerpixler : 천만에! –