[英]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.