2014-02-08 24 views
1

В моем вопросе это Refectoring Class. В этом классе я использую JPanel для добавления кнопки по отдельному методу panel() и позвоните в RefectClass Constatoror.Как добавить 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? он дает ошибку, когда я пытаюсь ее использовать. Я не могу использовать panel() Mehtod.

+1

Всегда копировать/вставлять ошибку и вывод исключений. –

ответ

1

Ваш метод панели() не возвращает ничего, так что вы не можете писать

надстройку (this.panel(), BorderLayout.CENTER);

попробовать

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

Thanx now code working Пожалуйста, объясните эти утверждения, которые выше упоминания you.thanx снова – Zu007

+0

В вашем методе панели вы устанавливаете поле экземпляра btnContainer. Только после выполнения панели() вы можете добавить это поле в рамку. Обратите внимание, что, возможно, было бы более элегантным решением вернуть поле из метода, как это было предложено другими ... – Balder

2

Ваша панель() метод возвращает недействительным - он должен вернуть вновь созданный JPanel вместо того, чтобы таким образом, что вы можете добавить его в JFrame:

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

Потому что я работаю над Interafce формы студента (в JDBC) Только свинг. готово. – Zu007

Смежные вопросы