【问题标题】:Cannot get access to inner class variables无法访问内部类变量
【发布时间】:2015-09-26 19:32:06
【问题描述】:

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

【问题讨论】:

    标签: java oop nested inner-classes


    【解决方案1】:

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

    private ListPanel listPanel;
    

    或在调用之前强制转换:

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

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2011-06-15
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多