我目前正在进行小组作业。我的任务之一是使用ActionListener添加"数据" JLabels在另一个班级。
我小组中的另一个人负责编写GUI,但是他的工作非常糟糕,使我的任务变得更加困难。我们被教导要练习MVC标准。但是,我不认为我现在可以正确地做到这一点。 GUI的代码是一大块代码,超过千行,所有代码都包含在1个方法中,这使得在不浪费太多时间的情况下很难整理。
之前我使用过ActionListeners,但仅在实践中以及它们都在一个类中时。
我想要实现的是当单击一个按钮时(来自GUI类),actionPerformed方法将从外部JAR文件调用方法并将JLabel更改为显示文本默认为"数据"从被调用的方法中获得。
目前我已经使用for循环创建了6个JLabel,
int totalLbls = 6;
JLabel lbl[] = new JLabel[totalLbls];
for (int j = 0; j <totalLbls;j++){
lbl[j] = new JLabel("default");
pa2.add(lbl[j]);
首先,我如何更改每个标签?最初我想过手动完成并单独映射6次,
JLabel lb1 = new JLabel(jarname.getData());
JLabel lb2 = new JLabel(jarname.getMoreData());
.
.
.
JLabel lb6 = new JLabel(jarname.getOtherData());
调用的方法返回String值。使用的方法和jar文件名只是占位符名称。
其次,我将如何实现ActionListener?我见过一些例子,但他们经常要求我们应用MVC标准。这意味着Controller同时调用View和Model。在我的情况下,只有一个非常混乱的视图。
答案 0 :(得分:0)
如果您没有将ActionListener实现到主类,那么执行此操作的一种方法是为该按钮创建一个特定的方法。
yourButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
/* Set your labels here.
OtherClass.lb1.setText(jarname.getData());
OtherClass.lb2.setText(jarname.getMoreData());
.
.
.
OtherClass.lb6.setText(jarname.getOtherData());
*/
}
});
答案 1 :(得分:0)
将知道JLabel的类的实例传递给具有动作侦听器的类。例如(简化访问):
public class LabelContainer { // May well extend JPanel or JFrame
public JLabel label1 = new JLabel("First");
// Plus five more..
}
public class LabelChanger implements ActionListener { // May well extend JButton
private LabelContainer labels;
public LabelChanger(LabelContainer labels) {
this.labels = labels;
someWidget.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
labels.label1.setText("Changed");
// five more...
}
}