2017-03-21 4 views
0

Da ich einen Action-Listener brauche, der eine ziemlich große Code-Größe hat, habe ich beschlossen, einen neuen Listener als Klasse zu erstellen. Mein Problem ist, dass ich den ausgewählten Wert aus einem Bildlaufbereich übergeben muss, damit ich Aktionen basierend auf diesem Element ausführen kann, übergibt es einen Nullzeiger, da der Listener erstellt wird, noch bevor ich auf die Schaltfläche klicke, die die AktionÜbergeben eines ausgewählten Werts an einen neuen Listener

Meine Klasse ist:

public class RecipeListener implements ActionListener{ 
//rest code 

Meine neue Klasse Konstruktor ist:

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

Und meine Implementierung Zuhörer:

zuerst aus der Liste

EDIT

Drücken Sie die Taste, ein Element, ausgewählt ist: Hier ist die Lösung, die den JList als Parameter an den Konstruktor läuft und eine Zeichenkette innerhalb des actionPerfomed Verfahrens macht. private JList tList;

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

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

Antwort

0

Sie sollten Ihre Zuhörer wie folgt definieren:

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 
    } 

In diesem Fall Wert wird genommen, nachdem Benutzer die Taste gedrückt wird.

+1

Eigentlich funktioniert das, aber Sie haben vergessen, die jlist als Parameter an den Konstruktor zu übergeben, was bedeutet, dass ich es nicht so verwenden kann, da es 2 verschiedene Klassen sind, so dass ich nicht direkt auf die jlist zugreifen kann. Wie auch immer, deine Idee hat funktioniert. – Woops

+0

@Woops Natürlich. Du hast recht. Ich habe mir gerade gedacht, dass 'RecipeListener' eine innere Klasse ist. Und 'friendlyList' ist ein Feld in umschließender Klasse. –

+0

Erstens würde ich es so machen, aber da recipeListener die Namen des Rezepts vergleichen und die spezifische Datei öffnen muss, die sich alle voneinander unterscheidet, bedeutet dies, dass eine große Code-Größe geschrieben werden muss und nicht würde Arbeit, die es in der gleichen Klasse wie andere GUI-Komponenten und einige kleine Hörer habe, die ich bereits habe. Danke noch einmal – Woops

Verwandte Themen