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

时间:2018-07-26 03:29:32

标签: java loops jbutton jlabel

我正在为每个字母创建一个带有按钮的程序。单击时,一个单词将显示在一个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);

1 个答案:

答案 0 :(得分:2)

首先定义可重复使用的ActionListener。为简化起见,我还使用了“单词”委托,该委托实际上将执行所需的功能,而不是将大量组件暴露给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);
}

实施....

用于显示内容的用户界面将需要实现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);
}

或类似的东西