无法访问内部类变量

时间:2015-09-26 19:32:07

标签: java oop nested inner-classes

我无法访问内部类" listPanel"的对象中的变量。 有变量" tutajcos"但我无法从CosView类中的其他方法访问。

什么问题? Eclipse不会提示我什么

package cos.view;

import java.awt.*;
import java.awt.event.*;
import java.util.Observable;

import util.Model;
import util.View;

import javax.swing.*;

import cos.controller.CosController;
import cos.model.CosModel;

public class CosView extends View implements ActionListener {

    private JPanel buttonsPanel;
    private JPanel listPanel;
    private CosModel theModel;
    private CosController theController;

    public CosView(CosController theController, CosModel theModel) {
        this.theModel = theModel;
        this.theController = theController;

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                buildGui();
            }
        });
    }

    private void buildGui() {
        setTitle("Program GUI");
        listPanel = new ListPanel();
        buttonsPanel = new ButtonPanel();
        add(buttonsPanel, BorderLayout.NORTH);
        add(listPanel, BorderLayout.CENTER);

        pack();
        setVisible(true);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 600);
        registerWithModel(theModel);
    }

    class ButtonPanel extends JPanel {

        JButton refreshButton = new JButton("Refresh");
        JTextField adresField = new JTextField("tutaj link", 10);

        public ButtonPanel() {
            refreshButton.addActionListener(CosView.this);
            add(refreshButton);
            add(adresField);
        }
    }

    class ListPanel extends JPanel {
        JTextField tutajcos;

        public ListPanel() {
            tutajcos = new JTextField(8);
            add(tutajcos);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String action = e.getActionCommand();
        theController.processUserAction(action);
    }

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("Updating interface");
        if (o instanceof CosModel) {
            String content;
            //there is a problem-------------
            listPanel.tutajcos.setText("siema");
        }
    }
}

1 个答案:

答案 0 :(得分:5)

问题不在于访问修饰符,而在于继承。您的listPanel变量声明为JPanel类型,其中没有名为tutajcos的可访问字段。 为了能够以您尝试的方式访问它,您需要将listPanel声明为ListPanel:

private ListPanel listPanel;

或在致电之前投出:

((ListPanel)listPanel).tutajcos.setText("siema");
相关问题