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;
}