我需要一种创建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);
}
答案 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);