(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);
}
或类似的东西
我正在创建一个程序,每个字母都有一个按钮。单击时,一个 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);
}
或类似的东西