2011-12-24 4 views
0

어떻게하면 Rectangle 객체의 외곽선을 페인트하기 위해 재정의 된 paint() 메서드를 얻을 수 있는지 궁금합니다. 문제는 Rectangle 객체의 크기와 위치가 임의적이어서 paint 메서드에 Rectangle이 그려지는 위치와 위치를 나타내는 코드를 포함 할 수 없다는 것입니다. 그래서 어떻게 든 페인트 (그래픽 g) 메서드에 의해 읽고 그린 수있는 뭔가 Rectangle 개체를 캐스팅 할 수있는 방법이 궁금하다? 당신의 도움에 미리 감사드립니다.Java의 paint() 메소드에 Rectangle 객체를 보내는 방법

+0

임의로 무엇을 의미합니까? 직사각형의 치수와 위치를 포함하는 코드에 몇 가지 변수가 있으며 페인트가 호출 될 때마다 (예 : repaint()) 선을 그립니다. – Bergi

답변

2

java.awt.Graphics에는 drawRect 방법이 있습니다. 해당 매개 변수는 Rectangle 개체의 멤버와 일치합니다.

g.drawRect(r.getX(), r.getY(), r.getWidth(), r.getHeight()); 
+0

정말 고맙습니다. 귀하의 반응은 많은 도움이되었습니다! g.drawRect 대신 g.draw (Rectangle)를 사용했습니다. 그것은 매우 잘 작동했는데 이제는 충돌 감지가 작동하지 않는 이유를 알 수 있습니다. 직사각형이 모든 곳에 있습니다. 다시 한 번 고마워. 좋은이. –

2

클래스가 코드의 다른 부분에서 사각형을 요청할 수 있어야합니다.

public interface RectangleProvider { 
Rectangle getRectangle(); 
} 

public MyPanel extendeds JPAnel { 
    private final RectangleProvider _provider; 
    public MyPanel(RectangleProvider provider) { 
    _provider = provider; 
    } 

    public void paintComponent(Graphics g) { 
    Rectangle r = _provider.getRectangle(); 
    // ... 
    } 
} 

이렇게하면 모양이 무엇인지 결정하는 코드가 생깁니다. 그런 다음 필요에 따라 구성 요소에 액세스 할 수 있고 페인팅 작업을 기반으로 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. Mat (아래)의 조언과 관련하여 조언을 사용했고 내 직사각형을 페인트 할 수 있었고 궁극적으로 충돌 감지가 작동하지 않는 이유를 알 수있었습니다. 답장을 보내 주셔서 대단히 감사합니다. 당신 없이는 할 수 없었습니다. 좋은 친구가 되라. –

+1

@DillonChaffey : 귀하를 도와 준 모든 답변에 대해 최대 득표를하고 단일 최상의 답을 "수락"하십시오. –

4

Rectangle는 Shape 인터페이스를 구현하고 Graphics2D 객체로 직접 칠할 수 있습니다.이 메서드는 JComponent의 paintComponent 메서드 (및 페인트 메서드이지만이 메서드는 사용하지 않는 것이 좋습니다.)에 전달됩니다. 따라서 쉽게 도형을 그릴 수 있습니다.

// in your JPanel or JComponent extended class 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.draw(myRectangle); // assuming that this holds the Rectangle object 
    //... 
} 
+0

이 답변을 받아 들여야합니다. 그것은 절대적으로 맞습니다. :-) +1 – rubixibuc

관련 문제