2011-11-07 3 views
0

다른 클래스의 드로잉 메서드를 호출하고 JPanel에 다른 그래프를 그려서 드로잉 플레이트 (JPanel 또는 무언가)를 인수로 가져와야하므로, 내 드로잉 메서드에 전달 (하지만 내가 할 수 있는지 여부는 모르겠다 .... 여기에 또 다른 시도입니다 ...)Java2D를 사용하여 Graphics 객체에 간단한 선을 렌더링 할 수 없습니다.

여기 구현의 일부입니다.

public class class_diagram extends Object 
{ 

private final int width = 60; 
private final int height = 80; 
private final int first_separate_line_distance= 30; 
private final int second_separate_line_distance= 55; 
private int left_up_x = 0; 
private int left_up_y = 0; 

public void setLeft_up(int left_up_x,int left_up_y) 
{ 
    this.left_up_x = left_up_x; 
    this.left_up_y = left_up_y; 
} 


//private Graphics to_draw ; 
//private JPanel place_to_draw; 

public class_diagram() 
{ 
    // instance variable "point to" the reference which was passed in. 
} 

@Override 
//the parameters stands for the left-up point's coordinate. 
public void draw(Graphics to_draw) { 
    // TODO Auto-generated method stub 

    System.out.println("Call draw method?\n"); 
    to_draw.setColor(Color.BLACK); 
    to_draw.drawLine(31, 41, 131, 768);  
} 

} 

를 클래스 정의와 '상기 묘화 방법 : 다음

난 클래스 class_diagram를 생성한다.

그리고 다른 클래스에서

:

내가 그리기 메서드를 호출하고, 실제로 호출,에서 System.out.println이 때문에 ("? 방법을 그릴 전화 \ n"); 그리기 방법은 저에게 메시지를 보여줍니다.

그럼에도 불구하고 !!! 내 JPanel에 드로잉 ... 그것은 나를 썼다. 내가 노력했기 때문에 적어도 4-5 방법 ....

import java.awt.BorderLayout; 

public class UML_Editor_13 extends JFrame { 

private Edit_panel canvas = new Edit_panel(); 

public static void main(String[] args) {      

UML_Editor_13 frame = new UML_Editor_13(); 

frame.setVisible(true); 

Graphics m= frame.canvas.getGraphics();     

Object n = new class_diagram(); 

n.draw(m); 

} 
} 
  1. 누군가 가르쳐주세요 왜이 줄 "그래픽 m의 =의 frame.canvas.getGraphics();" 가 작동하지 않습니다 ... m이 캔버스를 참조하는 경우 이유는

    to_draw.setColor (Color.BLACK); to_draw.drawLine (31, 41, 131, 768); // 작동하지 않았다 ...? ,

"그래서 인수로 (JPanel의 또는 뭔가를) 그리기 판을 수행해야하는 JPanel의 서로 다른 그래프를 다른 클래스의 드로잉 메서드를 호출하고 그릴 :

  • 다른 방법은 내 요구 사항을 충족하기 위해 그것을 내 그림 그리기 방법으로 전달합니다. "

  • +0

    화면에 아무것도 표시되지 않습니까? 아니면 아무 것도 표시되지 않습니까? JPanel이 이미 검정색입니까, 아니면 회색입니까, 아니면 배경색이 무엇입니까? – jefflunt

    +0

    JPanel의 배경색이 더 이상 바뀌지 않습니다. 흰색이 남았습니다 .... T - T. 아무 일도 일어나지 않았습니다. – Stallman

    답변

    2

    패널의 paintComponent(Graphics g) 메소드를 재정의해야합니다. 메서드 호출 super.paintComponent(g) 다음 draw() 메서드.

    +0

    그러나 draw 메서드를 호출하려면 다음과 같이 작성하십시오. Graphics m = frame.canvas.getGraphics(); 개체 n = 새 class_diagram(); n.draw (m); 좀 더 구체적으로 설명해 주시겠습니까? "paintComponent (Graphics g)"내에서 무엇을 써야합니까? 및 "draw"에 있어야하는 항목은 무엇입니까? – Stallman

    +0

    좀 더 구체적으로 알려주시겠습니까? "paintComponent (Graphics g)"내에 무엇을 써야합니까? "draw()"를 기반으로 한 실제 그리기 작업은 무엇입니까? – Stallman

    +0

    +1, 구성 요소의 getGraphics() 메소드를 사용하면 안됩니다. 그림은 일시적인 것입니다. 다음 번에 Swing이 컴포넌트를 다시 칠해야한다고 결정하면 페인팅이 손실됩니다. 그래서 paintComponent() 메소드에서 페인팅이 수행됩니다. – camickr

    관련 문제