Java中另一种方法中的访问实例变量

时间:2010-12-15 19:32:54

标签: java

我正在用Java编写GUI。一种方法初始化并显示一个表单:

public class launchQMBPMN extends CytoscapeAction {
  private JComboBox termDB;

  public launchQMBPMN(QMBPMN SaddleSum) {
    super("SaddleSum");
    setPreferredMenu("Plugins");


  }

  public class buttonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      JFrame hello = new JFrame();
      JLabel test = new JLabel(termDB.getSelectedItem());
      test.add(hello);
      hello.show();
    }
  }
  public void actionPerformed(ActionEvent e) {
    CytoscapeDesktop desktop = Cytoscape.getDesktop();

    InteractionTools tools = new InteractionTools();

    GridBagConstraints c = new GridBagConstraints();
    c.anchor = GridBagConstraints.LINE_START;
    c.weightx = 0.5;

    buttonListener buttonPressed = new buttonListener();

    // TERM DATABASE AND WEIGHTS

    JPanel qmbpTermsPanel = new JPanel(new GridBagLayout());

    termDB = new JComboBox(tools.discoverTermDatabases());
    c.gridx = 1;
    c.gridy = 0;
    qmbpTermsPanel.add(termDB, c);  


                ...

我想在buttonListner类中访问'termDB'。我该怎么做?

3 个答案:

答案 0 :(得分:2)

只需使用其名称访问它,该名称应该在外部类中工作。

另请参阅:http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

答案 1 :(得分:1)

在此处发布时访问它。一些评论:

  1. show JFrame方法(实际上属于java.awt.Window)已被弃用,请改用setVisible(true);

  2. 我不确定test.add(hello);是否真的需要。是吗?它将框架添加到标签。

  3. termDB.getSelectedItem()返回ObjectJLabel构造函数需要字符串:termDB.getSelectedItem().toString()

答案 2 :(得分:0)

您可以创建ButtonListener的子类,并在创建它时将termDB传递给它,或以其他方式设置它。

或者你可以定义一个需要按钮监听器并使termDB最终的匿名内部类,它将在你的ButtonListener实现中可用。或者你可以像在我提出的第一个选项中那样将termDB引用传递给匿名内部类。