2017-03-21 62 views
0

因爲我需要一個具有較大代碼大小的動作監聽器,所以我決定將一個新監聽器作爲一個類。 我的問題是,我需要從滾動窗格傳遞選定的值,所以我可以採取基於該項目的操作,它會傳遞一個空指針,因爲偵聽器甚至在我點擊按鈕後纔會採取動作將選定的值傳遞給新的監聽器

我的班級:

public class RecipeListener implements ActionListener{ 
//rest code 

我的新類的構造函數是:

public RecipeListener(ArrayList<Food> foodList, String aSelectedRecipe){ 
this.recipesList = foodList; 
this.selectedRecipe = aSelectedRecipe; 
} 

,我的實聽衆的是:

RecipeListener checkRecipeListener = new RecipeListener(breakfastArrayList, breakfastList.getSelectedValue()); 

按下按鈕,具有從列表

EDIT第一選擇的項目:這裏是溶液,這是通過將JList作爲參數來構造及其製造方法actionPerfomed內的字符串。 private JList tList;

public RecipeListener(ArrayList<Food> foodList, JList tempList){ 
/*construction arguments*/ 
} 

public actionPerfomed(ActionEvent arg0){ 
String selectedRecipe = (String) tList.getSelectedValue(); 
//rest code 
} 

回答

0

你應該定義你的聽衆如下:用戶按下按鈕後,

public class RecipeListener implements ActionListener{ 
    //rest code 
    public RecipeListener(ArrayList<Food> foodList){ 
     this.recipesList = foodList; 
    } 

    public void actionPerformed(ActionEvent e) { 
     String selectedReceipe = breakfastList.getSelectedValue(); 
     // other processing code 
    } 

在這種情況下值將被採取。

+1

實際上,這是有效的,但是你忘了將jlist作爲參數傳遞給構造函數,這意味着我不能像這樣使用它,因爲它們是2個不同的類,所以我無法直接訪問jlist。無論如何,你的想法奏效了。 – Woops

+0

@Woops當然。你是對的。我只是因爲某種原因想到'RecipeListener'是一個內部類。而'breakfastList'是封閉類中的一個字段。 –

+0

首先,我會這樣做,但由於recipeListener必須比較配方的名稱並打開特定的文件,每個文件都與另一個文件不同,這意味着要寫入大量的代碼,並且不會與其他gui組件和我已經擁有的一些小聽衆在同一個班上工作。再次感謝 – Woops

相關問題