Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问内部类变量_Java_Oop_Nested_Inner Classes - Fatal编程技术网

Java 无法访问内部类变量

Java 无法访问内部类变量,java,oop,nested,inner-classes,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

我无法访问内部类“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");
        }
    }
}

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

private ListPanel listPanel;
或在通话前播放:

((ListPanel)listPanel).tutajcos.setText("siema");