Вопрос: Чат на Java (Интерфейс клиента на JavaFX), как сделать?

Лучший ответ: Вот уже второй вопрос задаете и все такойже бестолковый.
Во первых причем тут javafx вообще? Это вообще ui и никаким боком и уж темболее сложностей просто по определению быть не может ну вообще никак и никаким боком. 
Во вторых, абсолютно, подчеркиваю АБСОЛЮТНО, все что должно волновать на данный момент это архитектура. И начать НУЖНО именно с нее, сядьте, возьмите просто клочок бумаги и напишите пунктами в столбик что необходимо от чата, вот прям все что вы от него хотите, отчертите линию и справа также столбиком сгрупируйте хотелки по их смыслу, дальше уже для  полученных групп справа написать псевдокод , что будет использоваться для этой фичи и какие типы данных будут ходить. Подобное я приводил уже в предудщем вашем вопросе но так и быть накидаю еще и тут пример.
В третих, на тостер приходить надо уже с конкретной проблемой да еще и с которой нагуглить ничего не удалось, что то типа вот у меня сериализация, вот метод сериализация, вот десериализации, а вот ошибка и немогу понять почему.
По второму пункту пример
Хочу                 |               Объединение схожего              |           Как сделать
----------------------------------------------------------------------------------------------------------------
1 чат с другом    |                              1                                   |    Формат (кому, откого, сообщение)
2 история            |                              2                                   |    Хранить в sql бд форматом сообщений
3 чат со всеми    |                              1                                   |    Формат (от кого, сообщение)
4 чат со всеми но в комнате |           1                                  |    Формат (от кого, комната, сообщение)
5 авторизация    |                               3                                  |     хранить в  sql базе, передавать Форматом(логин, пароль)
6 общение клиент сервер |                                                   |    Текстовый вид, Json
7 регистрация    |                               3                                  |    хранить в sql , передавать Форматом(логин, пароль)
n
По результату берешь и систематизируешь уже конкретнее типа такого:
1) Нарисовалось много разных форматов сообщений и надо их както отличать а значит сделаю класс родителя с полем int которое будет хранить тип сообщения. Проблема обмена информацией между клиентом и сервером решена полностью с обеих сторон.abstract class AMessage{
int messType;
}
2) Необходим универсальный метод сериализации и десериализации объектов из\в json. Возьму библиотеку gson, почитав ее доки получился вот такой простой способ без колхоза. Проблема полностью решена.public <T> T fromJson(String json, Class<T> classOfT){
        Gson gson = new GsonBuilder().create();
        try{
            return gson.fromJson(json, classOfT);
        }catch(JsonSyntaxException jse){
            return null;
        }
    }
    public String toJson(Object obj){
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        try{
            return gson.toJson(obj);
        }catch(JsonSyntaxException jse){
            return null;
        }
    }
3) Надо назначить и написать классы для каждого сообщения
Для сообщения в комнату будет так//от кого, комната, сообщение
class RoomMessage extends AMessage{
String from;
String roomName;
String message;
RoomMessage(String from, String roomName, String message){
 this.messType = 10;
 this.from = from;
 this.roomName = roomName;
 this.message = message;
}
}
n - такой будет класс регистрации и т.д.
Шаг n.
Вот только теперь начинаешь писать код. Причем при написании идешь по всем шагам и только так как описал это ранее, даже если в процессе реализации это оказалось сложно\криво\глупо\неправильно.
Программирование на самом деле состоит процентов на 90 из вот такой волокиты с написанием на бумаге всего и вся и только из 10% реализации. Кроме того таким способом все получится сделать очень быстро, логично и понятно, будет очень легко искать ошибки в программе и дебажить ее. Кроме того еще и получишь сразу почти готовую документацию которую останется только причесать и можно будет показать другому кодеру и он сразу въедет что тут и как работает. А вот заниматься написанием кода "эмпирическим" путем всегда тупиковое дело в котором будешь буксовать на месте, постоянно забывать что тут и как а главное зачем и почему неработает.
ps еслибы я был преподавателем, а Вы студентом, надавал бы по заднице и вообще заставил вместо такой работы при мне писать от и до всю логику програмки на бумаге а затем рассказывать зачем и почему так сделал.

Худший ответ: Как лучше сделать отправку объекта от клиента к серверу?
Смотря как сделан сервер. Можно, например, использовать старые добрые сокеты и ObjectOutputStream\ObjectInputStream. Или, если сервер понимает HTTP (скажем, использован какой-нибудь Spring WebMVC\WebFlux), то использовать Apache HTTP Components или что-то похожее.Но вопрос другом
В чем? Как вообще сохранять переписку
Лучше всего, конечно, использовать БД - проще делать выборки, чем из файлов.
А в целом, раз уж Простой чат уже делал
так сделайте все то же самое, только на Java, сложность тут не в использовании платформы, а именно в продумывании архитектуры.