2015-09-26 137 views
3

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

回答

5

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

private ListPanel listPanel; 

或调用之前将它转换:

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

谢谢! private ListPanel listPanel;帮助 – Mateusz