在我的问题中,这是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。
答案 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);