簡體   English   中英

Java ActionListener類找不到變量。

[英]Java ActionListener class can't find variables.

我有三個類,一個主類,一個GUI類,它使用awt + swing制作一個帶有4個按鈕的基本窗口。

//BEGIN ADD ACTION LISTENERS
handle_events event_handler=new handle_events();
home_b.addActionListener(event_handler);
my_account_b.addActionListener(event_handler);
my_history_b.addActionListener(event_handler);
exit_b.addActionListener(event_handler);
//END ADD ACTION LISTENERS

我的handle_events類如下所示:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class handle_events implements ActionListener
{
    public handle_events(){}

    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource==home_b) {do stuff;}
            //etc               
    }


}
//END EVENT HANDLER CLASS

問題是無論我做什么,ActionListener類都找不到home_b。 感謝你的幫助。

因為handle_events沒有引用。 您可以在構造函數中添加對此的引用:

class handle_events implements ActionListener
{
    private Object home_b;

    public handle_events(Object home_b){
         this.home_b = home_b;
    }

    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource==home_b) {do stuff;}
            //etc               
    }
}

(您可以使用home_b應該替換為Object的類型替換Object),也可以將handle_events類轉換為該類中的嵌套類,在該類中您具有初始化這些動作偵聽器的代碼。

順便說一句,除非您有充分的理由這樣做,否則您應該堅持通用的編碼樣式,並在開頭聲明類名時使用大寫字母,並且不要使用下划線: HandleEvents

因為您的handle_events類在另一個作用域中,所以它將永遠找不到home_b變量。 這就是很多人將匿名偵聽器類用於事件處理程序的原因。

JButton button = new JButton((new AbstractAction("name of button") {
public void actionPerformed(ActionEvent e) {
    //do stuff here
    }
}));

這樣做的最大好處是,您無需檢查誰是源,就可以立即知道源代碼,然后在代碼中知道該處理程序需要做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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