![](/img/trans.png)
[英]I can't get the string from ActionListener to different class in Java
[英]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.