Java 如何在框架中添加JPanel

Java 如何在框架中添加JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,在我的问题中,这是反射类。在这个类中,我使用JPanel通过一个单独的方法panel()添加按钮,并调用RefectClassconstrator public class RefectClass extends JFrame { JButton btnHome,btnBack; JPanel btnContainer; public RefectClass(){ super("Title Here"); setSize(350,300)

在我的问题中,这是
反射类
。在这个类中,我使用
JPanel
通过一个单独的方法
panel()
添加按钮,并调用
RefectClass
constrator

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()
方法。

您的panel()方法没有返回任何内容,因此您无法编写

添加(this.panel(),BorderLayout.CENTER)

试一试

您的panel()方法返回void-它应该返回新创建的JPanel,以便您可以将其添加到JFrame:

public JPanel panel(){

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

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

}
不过,让我指出,这是一种非常不寻常的做法。当类中实际需要新初始化的成员时,不必在返回新初始化成员的公共方法中初始化该成员。设想一个客户端从外部多次调用panel方法(因为它是公共的)。BtnContainer、btnHOme和BtnBack将被覆盖,但它们不会出现在屏幕上。 这个方法看起来很简单——为什么不直接将它包含在构造函数中呢?
或者至少让方法
私有

现在代码工作请解释上面提到的这些语句。再次在面板方法中设置实例字段btnContainer。只有在执行panel()之后,才能将此字段添加到框架中。不过请注意,按照其他人的建议,从方法返回字段可能是一个更优雅的解决方案……因为我正在处理学生表单的Interafce(在JDBC中)只会将我向后推。所有工作都已完成。始终复制/粘贴错误和异常输出。
public JPanel panel(){

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

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

}