JavaFX - Aufschrift der MenuItems aus der HashMap

JavaFX und die Programmierung

Moderator: wegus

Antworten
eroveli
Beiträge: 1
Registriert: 21.03.2015, 19:24

JavaFX - Aufschrift der MenuItems aus der HashMap

Beitrag von eroveli » 21.03.2015, 19:30

Hallo ich bräuchte eure Hilfe.

Es geht um eine CDSammlung-Anwendung. Für die GUI wird JavaFX verwendet.

Ich will im Code MenuItems hinzufügen und unter dem Punkt "Nach Interpreten auflisten" soll er Menüpunkte erstellen anhand der Interpreten(Key) die sich in meiner HashMap befinden.


Eine kleine Übersicht der relevanten Klassen:

Code: Alles auswählen

public class CDSammlung {
    
    /**
     *      So sieht die HashMap aus:  
     *      Key: Interpret
     *      Value: HashMap:    Key:Album     Value: CD-Objekt
     *      
     *      --> HashMap<Interpret, HashMap<Album, CD>>
     */
    private HashMap<String, HashMap<String, CD>> sammlung;
    
    public CDSammlung(){
        sammlung = new HashMap<String, HashMap<String, String>>();        
    }
    
    public void hinzufuegen(CD cd){
    }
    
    // Löscht ein CD-Objekt aus der Sammlung
    public CD loeschen(String interpret, String album){
    }
    
    //Gibt die CD zu dem Interpreten und Album zurück
    public void gibAlleInterpreten(){
    }
    
    // Gibt die Namen aller Interpreten zurück
    public CD[] gibAlleInterpreten(){   
    }
    
    // Gib alle Cds des genannten Interpreten
    public CD[] gibAlleCDsVon(){
    }
    
    // Entfernt die alteCD und ersetzt sie durch die neue
    public void aktualisierenCD(CD alteCD, CD neueCD){
    }
}

ich habe in meinem ViewController die MenuItems erstellt und dem EventHandler hinzugefügt, da jetzt zu jedem Menüpunkt eine Methode aufgerufen werden soll, bin ich leider ratlos wie ich auf die Menüpunkte zugreife die ich mir aus meiner HashMap geholt habe.

Siehe Methode: addInterpretItem() und handleMenu()

Folgendermaßen sieht es aus:

Code: Alles auswählen

private void addMenuAnzeigen(){
        
        
        // MenuItem und Menu erzeugen mit entsprechenden Titel
        MenuItem laden = new MenuItem("Laden");
        dateiMenu.getItems().add(laden);
        laden.setOnAction((e)->handleMenu(e));
       
        
        MenuItem alleAuflisten = new MenuItem("Alle Auflisten");
        anzeigenMenu.getItems().add(alleAuflisten);
        alleAuflisten.setOnAction((e)->handleMenu(e));
        
        Menu nachInterpetenAuflisten = new Menu("Nach Interpret Auflisten");
         // Methode addInterpetenItems ausführen
        addInterpretenItems(nachInterpetenAuflisten);
        
        MenuItem bearbeitenCD = new MenuItem("CD Bearbeiten");
        bearbeitenMenu.getItems().add(bearbeitenCD);
        bearbeitenCD.setOnAction((e)->handleMenu(e));
        
    }
    
    private void addInterpretenItems(Menu menu){
        
       
        // Laufe eine Schleife durch und hole zu allen Schlüsseln  
        // die Interpetetn und erstelle ein MenuItem mit dessen Namen
        for(String key : sammlung.gibAlleInterpreten(){
            menu.getItems().add(new MenuItem(key));
        }
        menu.setOnAction((e)->handleMenu(e));
        
    }
    /*
    public void setHandler(Menu menu, EventHandler<ActionEvent> handler){
        for (MenuItem it : menu.getItems())
        {
            // Wenn es sich um ein Untermenü handelt, so soll kein EventHandler zugewiesen werden
            if(!(it instanceof Menu)) 
                it.setOnAction(handler);
        }
    }*/

    
    private void handleMenu(ActionEvent e){
                    
                MenuItem mi = (MenuItem) e.getSource();
                String text = mi.getText();
                
                if(mi instanceof MenuItem){
                      if("Laden".equalsIgnoreCase(text)){
                              load();
                      }
                      else if("Alle Auflisten".equalsIgnoreCase(text)){
                              listAlle();
                      }
                      // Hier müsste ich irgendwie mir die Interpreten. Mittels der Methode get(..) müsste            
                      // ich doch unter Angabe einer Index auf Items zugreifen können oder?
                      else if(.................){
    
                      }
                      else if("CD Bearbeiten".equalsIgnoreCase(text)){
                              cdBearbeiten();
                      }
                }
                
    }

Ich hoffe ich habe mich ausreichend ausdrücken können, so dass ihr mich versteht. Nochmal ich will für die MenuItems deren Aufschrift ich mir aus meiner HashMap geholt habe in der ActionEvent-Methode() eine Methode zuordnen die dafür sorgt das nach Interpreten aufgelistet wird listNachInterpret(String interpret)

Ich hoffe auf eure Hilfe

Antworten