为什么setVisible
方法会抛出错误,提示在我的showPanel
方法中找不到符号?因为我引用的是存储在JPanel
中的ArrayList
,所以它没有任何意义,因此它应该可以使用setVisible
。
public class mainFrame extends javax.swing.JFrame {
/**
* Creates new form mainFrame
*/
private ArrayList list;
public mainFrame() {
initComponents();
this.setSize(500,500);
int h=this.getHeight();
int w=this.getWidth();
homePanel homePnl = new homePanel();
this.add(homePnl);
homePnl.setLocation(0,0);
homePnl.setSize(w,h);
homePnl.setVisible(true);
DeploymentInfoPanel infoPanel = new DeploymentInfoPanel();
this.add(infoPanel);
infoPanel.setLocation(0,0);
infoPanel.setSize(w,h);
atomServerPanel atomPnl = new atomServerPanel();
this.add(atomPnl);
atomPnl.setLocation(0,0);
atomPnl.setSize(w,h);
autoDeploymentPanel autoPnl = new autoDeploymentPanel();
this.add(autoPnl);
autoPnl.setLocation(0,0);
autoPnl.setSize(w,h);
list = new ArrayList<>();
list.add(homePnl);
list.add(infoPanel);
list.add(atomPnl);
list.add(autoPnl);
this.pack();
}
public void showPanel(int panelNum){
list.get(1).setVisible(true);
}
private ArrayList list;
您未指定将添加到ArrayList的对象的类型。因此,默认情况下,get()方法将返回Object的实例。 Object
当您定义ArrayList时,您应该使用:
private ArrayList<Component> list;
现在编译器知道您正在将Component
实例添加到ArrayList。
实际上,编译器将检查以确保仅添加Component
。
也将在编译时摆脱警告消息。
[类名也应以大写字母开头。有时候你会做,有时候你不会:
DeploymentInfoPanel infoPanel = new DeploymentInfoPanel();
...
atomServerPanel atomPnl = new atomServerPanel();
...
autoDeploymentPanel autoPnl = new autoDeploymentPanel();
注意论坛如何突出显示正确命名的类,使代码更易于阅读?
遵循Java约定并保持一致。
最后,要在框架的同一区域显示多个面板,您应该使用Card Layout。