簡體   English   中英

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

[英]How would I use an ActionListener on a Button to change JLabels in a different class?

我當前正在進行組分配。我的任務之一是使用ActionListener將“數據”添加到其他類的JLabel中。

我們小組中的另一個人負責GUI的編碼,但是他做得很糟糕,這使我的工作更加困難。 我們被教導實踐MVC標准。 但是我認為我現在不能正確地做到這一點。 GUI的代碼是一千多行代碼中的一大塊代碼,所有這些都包含在一種方法中,因此很難在不浪費太多時間的情況下進行整理。

我以前使用過ActionListeners,但僅在實踐中以及它們都在一個類中時才使用。

我想要實現的是,當單擊一個按鈕(從GUI類)時,actionPerformed方法將從外部JAR文件中調用方法,並將JLabel從顯示文本Default更改為從被調用方法獲得的“數據”。

目前,我通過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標准。 這意味着控制器同時調用視圖和模型。 就我而言,只有一個非常混亂的視圖。

如果您沒有在主類中實現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());
        */
    }
});

將知道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...
  } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM