gpt4 book ai didi

java - (Java) 使用 ActionListener 创建多个 (26) 按钮,无需重复代码

转载 作者:行者123 更新时间:2023-11-30 02:05:19 25 4
gpt4 key购买 nike

我正在创建一个程序,其中每个字母都有一个按钮。单击时,一个单词会显示在一个 JLabel 中,而图像会显示在另一个 JLabel 中。该单词也存储在列表中。我想知道是否有一种方法可以做到这一点,而无需重复类似的 block 26 次。

    JButton btnA = new JButton("A");
btnA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblImages.setText("");
lblImages.setIcon(newImageIcon(image);
lblWord.setText("Apple");
words.add(lblWord.getText());
}
});
btnA.setFocusable(false);
panel.add(btnA);

最佳答案

首先定义一个可重用的ActionListener。为了使它更容易,我还使用了“word”委托(delegate),它实际上会执行所需的功能,而不是将一堆组件暴露给 ActionListener

WordActionListener

public class WordActionListener implements ActionListener {

private String word;
private WordListener listener

public WordActionListener(String work, WordListener listener) {
this.word = word;
this.listener = listener;
}

public void actionPerformed(ActionEvent e) {
listener.addWord(word);
}
}

WordListener

public interface WordListener {
public void addWord(String word);
}

实现....

用于显示内容的 UI 需要实现 WordListener 接口(interface)

public class ... extends ... implements WordListener {
//...

public void addWord(String word) {
lblImages.setText("");
lblImages.setIcon(newImageIcon(image);
lblWord.setText("Apple");
words.add(lblWord.getText());
}
}

构建按钮时,您将需要一个单词列表...

private String[] listOfWords = String[] {"Apple", ..., "Zebra"};

然后你就可以循环它们...

for (char c = 'A'; c <= 'Z'; c++) {
JButton btn = new JButton(Character.toString(c));
btn.addActionListener(new WordActionListener(listOfWords[c - 'A'], this);
btn.setFocusable(false);
panel.add(btn);
}

或者类似的东西

关于java - (Java) 使用 ActionListener 创建多个 (26) 按钮,无需重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51530577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com