我制作了一个按钮数组,并尝试在 for 循环中向每个按钮添加一个 ActionListener,并使用 for 循环监听所有按钮,但问题是唯一响应的按钮是最后创建的按钮。我做错了什么?
nums = new JButton[13];
ListenForButton lfb = new ListenForButton();
for (int i = 1; i < 13; i++) {
nums[i].addActionListener(lfb);
}
<小时/>
private class ListenForButton implements ActionListener{
public void actionPerformed(ActionEvent e) {
for(int i=0;i<13;i++){
if( e.getSource() == nums[i]) {
System.out.println("pressed");
}
}
}
}
最佳答案
方法 ActionEvent.getSource() 返回一个 Object 类型的实例,为此您需要将其类型转换为 JButton
if( e.getSource() == nums[i])
说实话,所以这样做而不是上面的语句:
if( ((JButton)e.getSource()) == nums[i])
也试试这个:
nums = new JButton[13];
for (int i = 0; i < 13; i++)
{
nums[i] = new JButton();
nums[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae)
{
System.out.println("pressed");
}
});
}
或者使用 ActionCommand,如下所示:
nums = new JButton[13];
ListenerForButton lfb = new ListenerForButton();
for (int i = 0; i < 13; i++)
{
nums[i] = new JButton();
nums[i].setActionCommand("button"+i);
nums[i].addActionListener(lfb);
}
private class ListenForButton implements ActionListener{
public void actionPerformed(ActionEvent e) {
for(int i=0;i<13;i++){
if( e.getActionCommand().equals("button"+i)) {
System.out.println("pressed" + i); //for getting which button is actually clicked
}
}
关于java - JButton 数组 Action 监听器仅适用于最后一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15719209/