[英]Pass variables to ActionListener in Java
我有類似下面的代碼:
for(int i=0;i<10;i++){
button=new JButton(buttons[i]);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage(i);
}
});
menu.add(button);
}
但是,變量i
沒有在ActionListener類的范圍內定義。 如何傳遞變量?
除了Hovercraft的答案外,您還應該注意,您不會被迫對偵聽器使用匿名類。 氣墊船的答案代碼類似於以下代碼:
private class PageActionListener implements ActionListener {
private int page;
public PageActionListener(int page) {
this.page = page;
}
public void actionPerformed(ActionEvent e) {
setPage(page);
}
}
...
for(int i = 0; i < 10; i++){
button = new JButton(buttons[i]);
button.addActionListener(new PageActionListener(i));
menu.add(button);
}
完全不同的方法是向按鈕添加屬性,然后在動作偵聽器中檢索該屬性。 例如
button=new JButton(buttons[i]);
button.putClientProperty( "page", i );
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage((Integer)((JButton)e.getSource()).getClientProperty( "page" ));
}
});
變量i
其實在ActionListener的范圍,但因為你是試圖一個內部類使用一個局部變量,該變量必須是最終決定。 因此,您可以為此使用最終變量:
for(int i=0;i<10;i++){
final int index = i;
button=new JButton(buttons[i]);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage(index);
}
});
menu.add(button);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.