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

在Java中的另一个方法中访问实例变量,java,Java,我正在用Java编写GUI。一个方法初始化并显示表单: public class launchQMBPMN extends CytoscapeAction { private JComboBox termDB; public launchQMBPMN(QMBPMN SaddleSum) { super("SaddleSum"); setPreferredMenu("Plugins"); } public class buttonListener imple

我正在用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”。我如何做到这一点?

只需使用它的名称访问它,因为它位于外部类中


另请参见:

只需使用它的名称访问它,因为它位于外部类中


另请参见:

您可以创建ButtonListener的子类,并在创建时将termDB传递给它,或者设置它


或者,您可以在需要button侦听器的地方定义一个匿名内部类,并将termDB设置为final,它将在ButtonListener实现中可用。或者,您可以像在我介绍的第一个选项中一样,将termDB引用传递给匿名内部类。

您可以创建ButtonListener的子类,并在创建时将termDB传递给它,或者设置它


或者,您可以在需要button侦听器的地方定义一个匿名内部类,并将termDB设置为final,它将在ButtonListener实现中可用。或者,您可以像在我介绍的第一个选项中一样,将termDB引用传递给匿名内部类。

在这里发布时访问它。一些评论:

  • show
    方法的
    JFrame
    (实际上是
    java.awt.Window
    )已被弃用,请使用
    setVisible(true)取而代之

  • 我不确定
    test.add(hello)是您真正需要的。它是?它将框架添加到标签中

  • termDB.getSelectedItem()
    返回一个
    对象
    JLabel
    构造函数需要一个字符串:
    termDB.getSelectedItem().toString()


  • 按您在此处发布的方式访问它。一些评论:

  • show
    方法的
    JFrame
    (实际上是
    java.awt.Window
    )已被弃用,请使用
    setVisible(true)取而代之

  • 我不确定
    test.add(hello)是您真正需要的。它是?它将框架添加到标签中

  • termDB.getSelectedItem()
    返回一个
    对象
    JLabel
    构造函数需要一个字符串:
    termDB.getSelectedItem().toString()


  • 您可以执行
    CytoscapeAction。这个.termDB
    @falmari:这已经过于复杂了。顺便说一下,按照惯例,您应该让类名以大写开头,而变量名以小写开头。@thejh:更清楚,有时,如果有一个本地名称屏蔽了外部类的名称,则有必要这样做。您可以执行
    CytoscapeAction。这个.termDB
    @falmari:这已经过于复杂了。顺便说一句,按照惯例,您应该使类名以大写开头,变量名以小写开头。@thejh:更清楚,有时,如果有一个本地名称掩盖了外部类的名称,这是必要的。我不觉得很傻吗。当我得到符号not found错误时,编译器引用的是getSelectedItem()方法,而不是termDB。谢谢。我不觉得自己很傻。当我得到符号not found错误时,编译器引用的是getSelectedItem()方法,而不是termDB。谢谢。在这个错误之后,你已经成功地抢先击中了我想弄明白的一切。谢谢在这个bug之后,你已经成功地抢先击中了我想要弄明白的一切。谢谢