How to properly use ObservableMap in Java
NickName:Alex Chihaia Ask DateTime:2016-11-16T20:37:10

How to properly use ObservableMap in Java

I'm currently developing a chat application and I want, in my GUI controllers, to have Observables Collections to be able to manage messages that I receive.

So, to be more specific I have this listener where I listen for new messages that comes from the server:

Listener for new Chats:

class ChatCustomManagerListener {   
   private static HashMap <Chat, ChatCustomMessageListener> chatsTable;

   /*
   * This is the event that gets triggered when new chat is created
   */
   public void chatCreated (Chat newChat) {
       ChatCustomMessageListener listener = new ChatCustomMessageListener();
       newChat.addListener (listener);
       chatsTable.put (newChat, listener);
    }
}

Listener for new Messages:

class ChatCustomMessageListener {
   private List <Message> messagesQueue;

   public ChatCustomMessageListener () {
      //QueuedLinkedList is my extension of LinkedList class
      //add() is made at the tail of List
      //get() returns the head of list
      messagesQueue = new QueuedLinkedList ();
    }
   /*
   * This is the event that gets triggered when a new message is received
   */
    public void processMessage (Chat chat, Message message) {
       messagesQueue.add (message);
    }
}

Now, In my GUI Controllers, I want to define an ObservableMap to look for ChatCustomManagerListener.chatsTable changes and for each Entry inside chatsTable, I want to have an ObservableList for ChatCustomMessageListener.messagesQueue

What I got so far, but not working is this:

    class ChatController {
       private ObservableMap  <Chat, ChatCustomMessageListener> chatsObserver;
       private LinkedList <ObservableList <Message>> messagesObservables;
       private LinkedList <List <Message>> messageData;

       private void initObservables () {
          chatsObserver = FXCollections.observableMap (ChatCustomManagerListener.getChats ());

        messageData   = new LinkedList <> ();
        messagesObservables = new LinkedList <> ();

        chatsObserver.forEach ((chat, messageListener) -> {
            messageData.add (messageListener.getMessagesQueue());
        });

        messageData.forEach ((queueOfMessages) -> {
            ObservableList <Message> observer = FXCollections.observableList (queueOfMessages);
            observer.addListener (new ListChangeListener <Message> () {

                @Override
                public void onChanged (javafx.collections.ListChangeListener.Change <? extends Message> c)                      
                    log.debug ("New message was received");
                }
            });
            messagesObservables.add (observer);
        });

        chatsObserver.addListener (new MapChangeListener <Chat, ChatCustomMessageListener> () {

            @Override
            public void onChanged (
                    javafx.collections.MapChangeListener.Change <? extends Chat, ? extends ChatCustomMessageListener> change) {
                //define what is done when a new chat is created
                log.debug ("New  chat was created");

            }

        });
}}

So what is the right way to define my Observables?

Copyright Notice:Content Author:「Alex Chihaia」,Reproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/40632364/how-to-properly-use-observablemap-in-java

More about “How to properly use ObservableMap in Java” related questions

How to properly use ObservableMap in Java

I'm currently developing a chat application and I want, in my GUI controllers, to have Observables Collections to be able to manage messages that I receive. So, to be more specific I have this lis...

Show Detail

observablemap in scala

I am new to scala. I want to be notified whenever a map is modified. I thought this can be done using a observable map. I am trying to define a object like below var myObj = new Map[UUID, MyType]...

Show Detail

Link generic ObservableMap and MapChangeListener

I'm currently having issues to understand how to properly link an ObservableMap with the MapChangeListener. I need to create a generic ObservableMap because I will have different maps with differe...

Show Detail

Combo with ObservableMap Binding

I have a Combo populated using ObservableMap&lt;String, Member&gt;. What I want is if an item(key) is selected in combo, to be able to get corresponding object(value). This is what I have so far i...

Show Detail

Populate TableView with ObservableMap JavaFX

I wanted to know if it is possible to use a ObservableMap to populate a TableView ? I use ObservableMap instead of ObservableList because I need to add and delete often, so I need to minimize the c...

Show Detail

JavaFx: populate TableView with ObservableMap

I coudn't find in internet the right answer, how can I populate tableviw with ObservableMap as MapProperty. I would like to show the articles in a tableview sorted by value. public class Article {...

Show Detail

JavaFx, How to insert ObservableMap into TableView?

I want to populate map values into tableview. I tried with observableList and its working fine. Whenever any value adds to list then table values are updates / refresh and shows new changes. I want...

Show Detail

How to display an ObservableMap via JavaFX's TableView

Lately, I've been thinking about what's the best way to display an ObservableMap via JavaFX's TableView. final ObservableList&lt;Entry&lt;K, V&gt;&gt; observableList = FXCollections.observableArra...

Show Detail

Using Scala's ObservableMap

I'm trying to use scala.collection.mutable.ObservableMap. I grabbed the snippet below from scala-user and copied it to the REPL. The email mentions ticket 2704 which has been marked as fixed but...

Show Detail

ObservableMap with extractor for values?

Short: I am looking for a way to update contents of ListView based on changes made to Map and values inside the map. Situation: There is "source" LinkedHashMap&lt;String, Data&gt; on logical side...

Show Detail