如何在Frame中添加JPanel

时间:2014-02-08 08:57:14

标签: java swing jframe jpanel

在我的问题中,这是Refectoring Class。在本课程中,我使用JPanel通过单独的方法panel()添加按钮,并在RefectClass Constactor中调用。

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。

2 个答案:

答案 0 :(得分:2)

你的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;

}

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

答案 1 :(得分:1)

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

  

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

尝试

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