JButton的动作侦听器,局部变量

时间:2016-03-05 17:40:10

标签: java jbutton actionlistener

我正在尝试创建具有相同功能但没有实际创建多个按钮的多个按钮,因此我使用循环来创建任意数量的按钮,并尝试在其自己的类中添加ActionListener。但是我无法让按钮执行任何操作,因为ActionListener无法识别"按钮"作为变量。有没有办法实现ActionListner而不在与addButton相同的类中添加ActionListener?

public void addButton
{
    for(int i = 0; i<4; i++)
    {
        JButton button = new JButton(+)
        button.addActionListener(new ButtonAction())
    }
}

public class ButtonAction implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        File file = new File("squad");
        JFileChooser chooser = new JFileChooser(file);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG Images", "jpg");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(chooser);
        if(returnVal == JFileChooser.APPROVE_OPTION) 
        {
            System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName());
            button.setIcon(new ImageIcon("squad/" + chooser.getSelectedFile().getName()));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果您需要侦听器修改按钮,则需要引用该按钮。有两种可能性:

第一个:将它传递给监听器构造函数,然后将其存储在字段中:

for (int i = 0; i < 4; i++) {
    JButton button = new JButton();
    button.addActionListener(new ButtonAction(button))
}

第二个:由于监听器实际上必须修改触发事件的按钮,因此您可以从事件中获取按钮:

JButton button = (JButton) e.getSource();
button.setIcon(new ImageIcon("squad/" + chooser.getSelectedFile().getName()));