簡體   English   中英

將變量傳遞給Java中的ActionListener

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM