2013-03-31 4 views
1

현재 JPanel에있는 모양을 그리는 중입니다. 다른 모양은 JPanel이며, 내역은 JFrame입니다.다른 JPanel에있는 JPanel에서 어떻게 모양을 그립니 까?

저는 Google과 Youtube를 검색하여 한 패널이있는 JFrame 내에 도형을 그리는 방법을 찾았지만 현재 수행중인 작업에 도움이되는 내용을 찾지 못했습니다. (아마 나는 뭔가를 보지 않고있다).

코드 내가 지금까지 본 적이 : 이것은 단지 하나 개의 패널을 다루는있을 때 모든 좋은,하지만 난 1'st 패널 내에있는 패널에 디스플레이 모양을하고 싶어

public class GameScreen 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    public static void main(String[] args) 
    { 
     GameScreen gs = new GameScreen(); 
     JFrame f = new JFrame(); 
     f.setTitle(""); 
     f.setSize(400,400); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(gs); 
} 

나는 창조했다.

+0

Could'nt 얻을 귀하의 질문 만약 당신이 다음'JPanel'을 상속하여 자신의 패널을 만들고 해당'paintComponent' 방법을 무시하고 모양만큼 그리는 하나 개의 패널에서 모양을 많이 그리려 저기서저기서 그린거야. –

답변

2

JPanel을 지금과 같은 방법으로 JFrame에 추가하지만 JPanel의 고유 한 하위 클래스로 수행하십시오.

class MyPanel extends JPanel { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400,400); // As suggested by camickr 
    } 
} 

당신은 당신이 자녀의 구성 요소로 추가하는 경우, 구성 요소 내에서 구성 요소에 대해 작업 할 수 있습니다 JFrame의

public static void main(String[] args) 
{ 
    MyPanel mp = new MyPanel(); 
    JPanel jp = new JPanel(); 
    jp.add(mp); 

    JFrame f = new JFrame(); 
    f.setTitle(""); 
    f.setSize(400,400); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(jp); 
} 

이 앉아 JPanel과이를 추가 할 수 있습니다. 핵심은 구성 요소를 확장하고 변경하려는 메서드를 재정의하는 것입니다. 프레임이 BorderLayout를 사용하기 때문에이 난 그냥 한 패널 다루고있을 때 모든 좋은

2

,

코드는 잘 작동을 기록했다. 따라서 프레임에 패널을 추가하면 크기가 커지고 사용자 정의 페인팅이 표시됩니다.

내가 만든 첫 번째 패널 내에있는 패널에 도형을 표시하고 싶습니다.

패널을 만들면 기본적으로 FlowLayout이 사용됩니다. 패널에 사용자 정의 페인팅 패널을 추가하면 기본 크기를 표시하지 않으므로 (0, 0) 기본 크기로 표시됩니다.

사용자 정의 페인팅을 수행하는 패널에서 레이아웃 관리자가 패널을 정렬하는 방법을 알 수 있도록 getPreferredSize() 메소드를 구현해야합니다. 예를 들면 :

public Dimension getPreferredSize() 
{ 
    return new Dimension(200, 200); 
} 
관련 문제