2009-12-30 10 views
0

Graphics (또는 Graphics2D) 객체의 특정 위치에 JPanel을 그릴 가능성이 있습니까? 내 캔버스의 paint 메서드를 오버라이드하고 거기에서 panel.paint (g)를 호출하지만 위의 방식대로 작동하지 않습니다.캔버스에 JPanel을 그리는 방법은 무엇입니까?

@Override 
public void paint(Graphics g){ 
    Dimension size = panel.getPreferredSize(); 
    panel.setBounds(pos.x, pos.y, size.width, size.height); 
    panel.paint(g); 
} 

크기 객체는 올바르게 정의되어 있으므로 문제는 아닙니다. 또한 pos에는 화면에 올바른 x 및 y가 포함되어 있습니다.

답변

1

paint 대신에 paintComponent을 사용해야합니다. 후자는 AWT 메서드이고 전자는 Swing 메서드이기 때문입니다.

스윙의 paintComponent에 대한 하나 개의 좋은 점은 당신이 할 수 있도록 전달 된 Graphics 실제로 항상하는 Graphics2D 될 것입니다 것입니다 :

Graphics2D g = (Graphics2D)lg; 

는 이제 기존의 변환 저장 getTransform를 사용하여 다음을 수정 setTranform 또는 scale, translaterotate 방법 중 하나를 사용하여 Graphics2D의 변환. 이전 변환을 복원하는 것을 잊지 마십시오. 그렇지 않으면 그 상황에서 그려지는 다음 일을 퍼지 할 수 있습니다.

+1

페인트를 paintComponent로 대체하고 변환을 사용하여 패널을 다른 위치로 이동했습니다. 하지만 아무 것도 그려지지 않습니다 ... – Fortega

0

상황에 따라 BufferedImage로 그리는 것이 적절할 수도 있습니다. BufferedImage.getGraphics()를 사용하여 Graphics 컨텍스트를 가져올 수 있습니다. 그런 다음 어떤 방법 으로든 BufferedImage의 컨텍스트를 그릴 수 있습니다.

+0

패널을 BufferedImage로 변환 할 수 있습니까? 또는 여기에 누락 된 링크가 무엇입니까? – Fortega

+0

어쩌면 createImage (int width, int height)? 하지만이 경우에는 null이 반환됩니다. – Fortega

관련 문제