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