2016-03-05 51 views
-1

我想創建多個按鈕,但實際上並沒有創建多個按鈕,所以我使用了一個循環來創建儘可能多的按鈕,我試圖添加一個ActionListener自己的班級。但是,我無法讓按鈕執行任何操作,因爲ActionListener不會將「按鈕」識別爲變量。沒有添加與addButton相同的類中的ActionListener的實現ActionListner的方法嗎?JButton的動作監聽器,局部變量

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

如果您需要偵聽器修改按鈕,那麼它需要有一個對按鈕的引用。有兩種可能性:

第一招:你把它傳遞給聽者的構造函數,然後將其存儲在一個領域:

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()));