2017-07-08 1 views
-1

Hé les gars Je n'ai aucune idée ce qui se passe? J'ajoute des anniversaires mais si je les appelle avec getHashMap par exemple je ne peux pas obtenir les éléments dans le menu swing de la classe. Je viens d'avoir des réflexions sur le problème. Je pense que c'est parce que j'appelle un nouvel événement dans une classe et que je publie le hashmap dans une autre classe que j'appelle aussi un nouvel événement. Mais je ne sais pas si j'ai raison?Impossible d'obtenir l'élément d'une HashMap qui est un nouveau puttet?

Peut-être toute solution m'aiderait. Si vous avez des questions alors s'il vous plaît demandez-moi. Pour moi, il est important d'apprendre quelque chose de nouveau. Il y a quelques showen court codé parce que ce n'est pas pertinent. Je débogue la classe swingFormatFunction et découvre que l'événement d'instance est null.

Cette partie ne sera pas ajoutée dans ma HashMap.

public class swingFormatFunction{ 
private Event event = new Event(); 
public void geburtstageFormatieren(String content) { 
    String formatContent = content.replace(';', ' '); 
    for (String s : formatContent.split("\n")) { 
     event.addBirthday(s.substring(0, 5).toString(), new Event(s.substring(12).toString())); 
    } 

} 
} 

C'est mon menu où j'appelle un Menuitem et cliquez sur "ok". Cette fonction fonctionne bien, je reçois les éléments en sortie.

public class swingMenu{ 
okBTN.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == okBTN) { 
      dialog.dispose(); 
      JDialog dialog = new JDialog(); 
      dialog.setModal(true); 
      dialog.setTitle("Calendar Special Events"); 
      int yearNumber = Integer.parseInt((String) yearCombobox.getSelectedItem()); 
      JTextArea textArea = new JTextArea(); 


      Event event = new Event(yearNumber); 
      StringBuilder stringBuilder = new StringBuilder(); 

      for (Map.Entry entry : event.getEventMap().entrySet()) { 
       stringBuilder.append(entry.getKey() + " : " + entry.getValue() + "\n"); 
      } 

      textArea.setText(stringBuilder.toString()); 
      dialog.setContentPane(textArea); 


      dialog.pack(); 
      dialog.setLocationRelativeTo(null); 
      dialog.setResizable(true); 
      textArea.setEditable(false); 
      dialog.setVisible(true); 


     } 
    } 
}); 

C'est ma classe d'événement. Cette classe contient ma HashMap où je travaille avec.

public class Event{ 
    private HashMap<String, Event> eventMap = new HashMap<>(); 
    public Event(String name) { 
     this.name = name; 
    } 

    public Event(int year) { 
     addStrongMoveableHolidayInMap(year); 
    } 

    public Event() { 

    } 

    private void addMoveableHoliday(int year) { 
     /*  Bewegliche Feiertage */ 

     /*Rose monday (-48)*/ 
     int daynumberOfEasterSunday = calenderFunction.easterSunday(year) - 48; 
     String gregorDate = calenderFunction.kalenderDatumFuerJD(daynumberOfEasterSunday); 

     String day = gregorDate.substring(0, 2); 
     String month = gregorDate.substring(3, 5); 
     String date = day + "." + month; 
     this.eventMap.put(date, new Event("Rosenmontag")); 
    } 

    private void addStrongHoliday(int year) { 
     /*  Feste Feiertage   */ 
     this.eventMap.put("24.12", new Event("1. Weihnachtstag")); 
    } 

    void addStrongMoveableHolidayInMap(int year) { 
     addStrongHoliday(year); 
     addMoveableHoliday(year); 
    } 

    public void addBirthday(String year, Event event) { 
     this.eventMap.put(year, event); 
    } 

    public HashMap<String, Event> getEventMap() { 
     return eventMap; 
    } 
} 

J'espère que vous pouvez m'aider.

Cordialement Manuellsen

+1

Alors, que demandez-vous exactement? Si vous nous demandez de déboguer votre code, alors ce n'est pas ce que Stack Overflow est pour. Si vous demandez quelque chose d'autre, veuillez le préciser (et retirer les morceaux de code qui ne correspondent pas à votre question spécifique). –

+0

Nous ne pouvons pas répondre à une question que vous n'avez pas posée; Pardon. –

+0

manicka comprendre ma question – ManuellsenDeve

Répondre

0

Les deux objets d'événements sont totalement indépendants. La première en swingFormatFunction est un attribut d'instance et la deuxième en ActionListener est une variable locale.
L'attribut eventMap de l'événement est également un attribut d'instance, de sorte que chaque objet Event possède sa propre correspondance. Peut-être que vous voulez partager un eventMap à travers tous les événements.

+0

Ty tu comprends ma question. Y at-il un moyen facile de partager ou comment je devrais le faire dans vos avis. Peut-être singleton? – ManuellsenDeve

+0

Ma suggestion est de séparer l'événement (alias point nommé dans le temps/calendrier) et un ensemble d'événements (le eventMap) dans leurs propres classes. Ensuite, passez l'ensemble des événements dans swingFormatFunction et ActionListener (par constructor, setter, DI, ...). L'implémenter comme Singleton est l'une des solutions possibles. – manicka

+0

Et encore une note: rendre le jeu d'événements thread sûr, si elle peut accéder à partir de différents threads (l'ActionListener dans AWT thread et la fonction swingFormatFunction ailleurs - c'est ma supposition de vos extraits de code) – manicka