如何在Button上使用ActionListener来更改其他类中的JLabel?

时间:2016-03-23 02:35:20

标签: java jbutton actionlistener jlabel

我目前正在进行小组作业。我的任务之一是使用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。在我的情况下,只有一个非常混乱的视图。

2 个答案:

答案 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...
  } 
}