java - 如何在Frame中添加JPanel

标签 java swing jframe jpanel

在我的问题中,这是 Refectoring Class。在本类(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() 方法。

最佳答案

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

}

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

关于java - 如何在Frame中添加JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644014/

相关文章:

java - 如何按顺序随机播放图像?

java - 为什么这个 JPanel 不符合指定的大小?

java - 如何为没有标题栏的 JFrame 提供拖动功能?

java - Hibernate 子查询将 DetachedCriteria 应用到 ManyToMany 连接表

Java 6 guava 谓词到 Java 8 谓词和 Lambda

java - RMI 连接在本地主机上被拒绝

单击单元格之前表中的 Java JComboBox 不显示

java - JRadioButton java

java - 将 JLabel 旋转 90 度 Java

java - 如何为无名 JFrame 设置框布局?