2014-01-11 3 views
0

나는 자바를 배우고 난 내가 패널에 선을 그어야 할 시작 :Java 패널에 컴포넌트를 추가하는 방법은 무엇입니까? 내 코드 것

에서 시작하지만

캔트 :

public class Window extends JFrame{ 

    public Window(){  
     setSize(600,600); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

    Container pow = getContentPane(); 
    Component k = new Test();   
    pow.add(k); 

    Panel p1 = new Panel(); 
    p1.setBounds(40, 40, 520, 520); 
    p1.setBackground(Color.white); 
    pow.add(p1);  
} 
} 

및 패널 클래스

import java.awt.*; 
import javax.swing.*; 

public class Test extends JPanel{ 

public void paintComponent(Graphics g){ 
    g.drawLine(30, 50, 30, 550); 
    g.drawLine(30, 550, 550, 550); 

    g.drawLine(30, 50, 20, 60); 
    g.drawLine(30, 50, 40, 60); 

    g.drawLine(550, 550, 540, 540); 
    g.drawLine(550, 550, 540, 560); 
} 

} 

및 주

public static void main(String[] args){ 
    Window mo = new Window(); 
    mo.setVisible(true); 
} 

내 구성 요소가 패널 아래에있는 이유는 무엇입니까? Sory 그것은 내 코드

+0

'패널'과 '컴포넌트'는 AWT이고, 'JPanel'과'JComponent'는 스윙입니다. AWT는'paintComponent'를 사용하지 않고'paint' 만 사용합니다. AWT 클래스를 Swing 클래스로 전환하거나'paintComponent'를'paint'로 전환하면 _might_ work가됩니다. – Pietu1998

+0

전체 코드를 게시하여 IDE에 붙여넣고 테스트 할 수 있습니다. 그리고 레이아웃 관리자를 사용하는 방법을 배웁니다. –

+0

클래스가 AWT'Panel'을 확장하면'paintComponent' 메서드가 없으므로 실제로 아무 것도 덮어 쓰지 않으므로 모든 그림이 표시되지 않습니다. –

답변

1
  • contentPane은 기본 레이아웃으로 BorderLayout을 사용합니다.
  • where를 지정하지 않고 BorderLayout 컨테이너에 구성 요소를 추가하면 BorderLayout.CENTER가 추가됩니다.
  • 그러면 이전에 동일한 위치에 추가 된 다른 모든 구성 요소를 덮어 씁니다.

솔루션 : 최대에

  • 읽기 및 기타 레이아웃 관리자를 사용하여 실험. this tutorial을 확인하십시오.
  • setBound를 설정하지 않거나 null 레이아웃을 사용하지 마십시오.
1

PanelComponentJPanelJComponent 스윙이 AWT입니다. AWT는 paintComponent 대신 paint을 사용합니다. AWT 클래스를 Swing 클래스 또는 paintComponent에서 paint으로 전환하면 작동 할 수 있습니다.

paintComponentComponent이 아니므로 우선 적용 방법에 @Override을 추가하는 것이 좋습니다.

또한 구성 요소와 패널을 동일한 컨테이너에 추가합니다. 구성 요소를 패널에 놓습니다.

p1.add(k); // yes (add this to your code) 
pow.add(k); // no (remove this from your code) 
pow.add(p1); // previous would get covered 
관련 문제