I define a event and I would like to notify all component which has define listener in project . The following is event code snippet;
/**
* 消息事件
*/
public class ChatEvent extends Event {
public static final EventType<ChatEvent> CHAT_ANY = new EventType<>(Event.ANY, "CHAT");
public static final EventType<ChatEvent> RECEIVE_CHAT = new EventType<>(CHAT_ANY, "CHAT_RECEIVE");
private final Chat.ChatMessage chatMessage ;
public ChatEvent( EventType<? extends Event> eventType, Chat.ChatMessage chatMessage ) {
super(eventType);
this.chatMessage = chatMessage ;
}
@Override
public Object getSource() {
return chatMessage;
}
public Chat.ChatMessage getChatMessage(){
return chatMessage;
}
public ChatEvent(Object source, EventTarget target, EventType<? extends Event> eventType,Chat.ChatMessage chatMessage) {
super(source, target, eventType);
this.chatMessage = chatMessage;
}
}
> Event definition
Conponent eventHandler
receiveMessage.addEventHandler(ChatEvent.RECEIVE_CHAT , (chat)-> {
log.info("client receive message");
Chat.ChatMessage chatMessage = chat.getChatMessage();
MessagePane msgPane = new MessagePane(chatMessage);
vBox.getChildren().add(msgPane);
receiveMessage.setText(chatMessage.getContent());
});
Above is all about event , and the I use the below method to fire event .
Runnable fireEvent = () -> EventUtil.fireEvent( receiveMessage,chatEvent );
if (!Platform.isFxApplicationThread()){
Platform.runLater(fireEvent);
}
else {
fireEvent.run();
}
Above code snippet EventUtil.fireEvent
just only fire the specify component , it is not desired .
Major question
Is there some method could notify all component which has define eventHander ?