为什么程序在showPanel方法中的setVisible处抛出错误“找不到符号”?

问题描述 投票:0回答:1

为什么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);
}
java swing jpanel
1个回答
1
投票
private ArrayList list;

您未指定将添加到ArrayList的对象的类型。因此,默认情况下,get()方法将返回Object的实例。 Object

没有setVisible(…)方法

当您定义ArrayList时,您应该使用:

private ArrayList<Component> list;

现在编译器知道您正在将Component实例添加到ArrayList。

实际上,编译器将检查以确保仅添加Component

也将在编译时摆脱警告消息。

[类名也应以大写字母开头。有时候你会做,有时候你不会:

DeploymentInfoPanel infoPanel = new DeploymentInfoPanel();
...
atomServerPanel atomPnl = new atomServerPanel();
...
autoDeploymentPanel autoPnl = new autoDeploymentPanel();

注意论坛如何突出显示正确命名的类,使代码更易于阅读?

遵循Java约定并保持一致。

最后,要在框架的同一区域显示多个面板,您应该使用Card Layout

© www.soinside.com 2019 - 2024. All rights reserved.