2014-02-08 4 views
1

내 질문에, 이것은 Refectoring Class입니다. 이 클래스에서는 JPanel을 사용하여 panel() 메서드로 버튼을 추가하고 RefectClass Constactor에서 호출합니다.프레임에 JPanel을 추가하는 방법

public class RefectClass extends JFrame { 
    JButton btnHome,btnBack; 
    JPanel btnContainer; 

    public RefectClass(){ 
     super("Title Here"); 
     setSize(350,300); 
     add(this.panel(),BorderLayout.CENTER); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public void panel(){ 

     btnContainer=new JPanel(); 
     btnHome=new JButton("Home"); 
     btnBack=new JButton("Back"); 

     btnContainer.add(btnHome); 
     btnContainer.add(btnBack); 

    } 

} 

이제 JFrame에 패널을 추가하는 방법은 무엇입니까? 나는 그것을 사용할 때 오류가 발생합니다. Mehtod에 panel()에 사용할 수 없습니다.

+1

항상 오류 및 예외 출력을 복사/붙여 넣기하십시오. –

답변

1

당신이

추가 (this.panel(), BorderLayout.CENTER를) 쓸 수 있도록 귀하의 패널() 메소드는 아무 것도 반환하지 않습니다;

시도

this.panel(); 
add(this.btnContainer,BorderLayout.CENTER); 
+0

Thanx 코드가 작동 됨 이제 위에 언급 한 내용을 설명하십시오 .thanx 다시 – Zu007

+0

패널 메서드에서 인스턴스 필드 btnContainer를 설정합니다. panel()을 실행 한 후에 만이 필드를 프레임에 추가 할 수 있습니다. 비록 그것이 다른 사람들이 제안한 것처럼 필드에서 필드를 반환하는 것은 아마도 더 우아한 해결책 일 것입니다 ... – Balder

2

귀하의 패널() 메소드가 무효 리턴 - 당신이 JFrame의에 추가 할 수있는 대신 같은 새로 만든 JPanel을 반환해야합니다 :

public JPanel panel(){ 

    btnContainer=new JPanel(); 
    btnHome=new JButton("Home"); 
    btnBack=new JButton("Back"); 

    btnContainer.add(btnHome); 
    btnContainer.add(btnBack); 
    return btnContainer; 

} 

나 포인트를 보자 하지만 이것은 매우 드문 접근법입니다. 클래스 내에서 메소드가 실제로 필요한 경우 새로 초기화 된 멤버를 반환하는 공용 메소드에서 멤버를 초기화하지 않아도됩니다. 패널 메서드를 외부에서 여러 번 호출하는 클라이언트가 공개되어 있기 때문에이를 상상해보십시오. BtnContainer, btnHOme 및 BtnBack은 무시되지만 화면에 나타나지 않습니다. 이 메소드는 단순히 요정처럼 보일뿐입니다. 생성자에 직접 포함하지 않는 이유는 무엇입니까? 또는 최소한 private 메소드를 작성하십시오.

+0

저는 (JDBC에서) 학생용 폼의 Interafce에서 일하고 있기 때문에 Swing만이 저를 다시 밀고 있습니다. 수행. – Zu007

관련 문제