Почему программа выдает ошибку "не удается найти символ" в setVisible в моем методе showPanel? - PullRequest
0 голосов
/ 15 марта 2020

Почему метод 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);
}

1 Ответ

1 голос
/ 15 марта 2020
private ArrayList list;

Вы не указали тип объекта, который будет добавлен в ArrayList. Поэтому по умолчанию метод get () вернет экземпляр Object. Не существует метода setVisible (…) для Object

Когда вы определяете ArrayList, вы должны использовать:

private ArrayList<Component> list;

Теперь компилятор знает, что вы добавляете Component экземпляров в ArrayList.

Фактически, компилятор проверит, чтобы убедиться, что вы добавляете только Component.

Это также избавит от предупреждающих сообщений при компиляции.

Также имена классов должны начинаться с заглавной буквы. Иногда вы делаете, а иногда нет:

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

Заметьте, как форум выделяет правильно названные классы, облегчая чтение кода?

Следуйте Java соглашениям и будьте последовательными.

Наконец, для отображения нескольких панелей в одной и той же области фрейма вы должны использовать Card Layout .

...