(Java) 使用 ActionListeners 创建多个 (26) 个按钮而无需重复代码

(Java) Creating multiple(26) buttons with ActionListeners without repeating code

我正在创建一个程序,每个字母都有一个按钮。单击时,一个 JLabel 中显示一个词,另一个 JLabel 中显示一个图像。这个词也存储在一个列表中。我想知道是否有一种方法可以做到这一点而无需重复类似于此的块 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" 委托,它实际上会执行所需的功能,而不是将一堆组件暴露给 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接口

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);
}

或类似的东西