当我尝试将ActionListener应用于JButton以更改JLabel

时间:2016-03-23 19:53:28

标签: java jbutton actionlistener jlabel

我需要一种创建ActionListener的方法,当按下JButton时,它会更新7个不同JLabel的内容,以文本形式显示信息。

从外部JAR文件调用的方法中检索数据。这些方法返回ArrayList。我试图将ArrayList转换为String,并尝试使用setText()更改JLabel内容。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import api.anAPI.THEAPINAME;


public class Controller implements ActionListener {

    private MainGUI maingui;
    private SubPanel subpanel;
    private static THEAPINAME anAPI =new THEAPINAME("XyP0D75oRCGrLE78","x47ka5jmOGaJ2zvw");
    static ArrayList<String> nameList =new ArrayList<String>();
private String names;


     public Controller(MainGUI maingui,SubPanel subpanel){

        this.maingui = maingui;
        this.SubPanel = subpanel;

        MainGUI.getSearchBtn().addActionListener(this);


        nameList.addAll(anAPI.getNames());

        for (String s: nameList){

         names+= s+"\t";
        }

    }

    public void actionPerformed(ActionEvent e) {

         SubPanel.label1.setText(names);
    //6 more Labels. 
    }

}

另外,因为我有7个JLabel,我需要做7个getLabel方法吗?或者有一种方法可以通过一种方法获得它们。

我不完全确定我做错了什么,可能是我使用的getMethods返回了错误的小部件,因为GUI的代码不是由我完成的,而是由队友完成的,他做得非常差为我们说清楚的工作。

更新 修复了GUI以使其更清晰,所以我认为这不再是问题。现在我认为问题可能是我没有像我想象的那样将ArrayList的内容转换为String。

代码的所需功能是在点击JButton时,所讨论的JLabel都更新为其相关数据。

addController方法

public void addController(Controller controller){
        control = controller;
        jb1.addActionListener(control);

    }

1 个答案:

答案 0 :(得分:0)

您没有真正描述当前代码的问题。

您可以在getLabels()类中添加一个方法SubPanel来返回其所有标签,或者您可以通过扩展或添加方法setLabelText(String text)为其所有标签设置文字直接修改SubPanel类。

<强>更新

您的代码中有几个非常令人困惑的部分。

在您的构造函数中,它应该是this.subpanel = subpanel,然后它应该是maingui.getSearchBtn().addActionListener(this),同样在方法actionPerformed中它应该是subpanel.label1.setText(names)。这可能不是你的问题,因为你没有说它是你实际运行的代码。

看起来你没有创建任何类Controller的实例,因此其中的代码永远不会被执行。

您需要在Controller类以外的代码中添加一些代码:

   MainGUI maingui;
   SubPanel subpanel;
   // they're somehow initialized

   Controller controller = new Controller(maingui, subpanel);