Ответы пользователя по тегу JavaFX
  • Как анимировать рандомный символ в label в JavaFX приложении?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Готовое врядли что то есть но сделать такое не проблема. Пишите свой компонент. Логика предельно простая и реализовать можно несколькими способами. Честным но тяжелым или легким но обманом
    Тяжелый по честному крутить массив, по легкому заранее отрендренную анимацию пускать.
    Ответ написан
  • Как упростить написанный код?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Легко,
    во первых как отвечал в прошлом вопросе НЕ ИСПОЛЬЗУЙ Scene Builder, пиши все руками можно даже без fxml.
    во вторых оберни весь кошмар с анимацией и кнопочками в отдельный класс компонент, код уже сократится в разы. Деактивацию\активацию других элементов также легко уместить до единого места путем получения у родительского контейнера всех дочерних и выставления в них setDisable
    Ответ написан
    Комментировать
  • Как сделать плавное появление блока в JavaFX?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Не используй визуальный редактор.
    Почитай какие методы существуют у нужного компонента и реализуй то что тебе необходимо.
    Ответ написан
  • JavaFx. Как сохранить состояние checkbox'a и текстового поля?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Сохранить содержимое\состояние нужных компонентов в json\txt\prop\xml\etc при закрытии программы и востанавливать его при окртытии(отрисовалась форма, читаешь состояние и заполняешь нужное).
    Ответ написан
    Комментировать
  • Как вызывать переменную (которая запечатана в public void) после кода из описания вопроса - JavaFX?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Выше вам ответили костылем за который отрывают руки. Получайте свое значение из slider.getValue()
    Ответ написан
    Комментировать
  • JavaFX TEXTAREA после сохранения пропадают переходы на новую строку?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Это проблема не javafx и даже не самой java а конкретно windows и его notepad.
    В мире принято перенос строки выполнять кодами просто через \n (код LF или U+000A) и это корректно для линуксов\маков\андроидов\айосов и всего прочего.
    В мире майкрософт и их windows требуется код \n\r (код LF и CR) и так работает все штатное в системе. Некоторые разработчики или ЯП автоматом умеют определять что же тут подразумевается, как пример тотже саблайм. Винда же и ее блокнот этого делать не умеют.
    Знак новой строки обычно называют EOL (End Of Line).
    Так что если вам так важен блокнот винды то заменяйте EOL на корректные и все будет работать.
    Ответ написан
    Комментировать
  • Как в javafx скачать файл с прямой ссылки и сохранить его в папку с программой?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Никак, javafx вообще не относится к вопросу.
    Ответ написан
    Комментировать
  • Как избавится от NoClassDefFoundError после сборки JavaFX проекта в Eclipse?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    IDE идет со своей jdk\jre внутри и из под нее все работает.
    У вас в ОС по умолчанию установлен openjdk который не умеет javafx из коробки. В openjdk поддержка javafx появится только в 9 версии, точно не помню. Сейчас для решения проблемы ставьте 9 версию или openjfx или oracle jre\jdk.
    Ответ написан
    Комментировать
  • Когда подключать обработчики событий в JavaFX, если цели событий появляются динамически?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    А в чем сокральный смысл перетыкивать и создавать кучи обработчиков? Судя по коду у вас абсолютно одинаковый результат т.е.
    1) Нажали плюсик, появилась кнопка-картинка
    2) Нажали кнопку-картинку , выбрали картинку, появилась кнопка "ок"
    3) Кнопка "ок" делает System.out.println("Add activity");

    Отсюда следует что смысла так городить тоже нет потому как проще пойти другими путями =) Какими рекомендую пораскинуть мозгами самим. Только подскажу наводкой, классы можно переопределять и наследовать, можно хранить ссылку на выбранный объект и плясать от нее, можно объявить EventHandler и просто давать ссылку нужным компонентам а не создавать и плодить кучи EventHandler'ов.
    Ответ написан
  • Как очистить таблицу TableView.Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    TableView только отображает данные из коллекции, следовательно отчисть коллекцию и все. Если пихаешь данные странными образами то коллекцию можно вытянуть и и почистить типа такого tableView_твой_инстанс.getItems().clear()
    Ответ написан
    2 комментария
  • Как вывести значение в ячейку TableView?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    nameM.setCellValueFactory(new PropertyValueFactory("имя_поля_в_MusicStruct"));
    Ответ написан
    3 комментария
  • Выдает ошибку потока, при применении tab.getId().equals(). Кто подскажет в чем проблема?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    1) напрягает "Exception in thread "Thread-4" java.lang.NullPointerException", часом не из другого ли потока все работает?
    2) Я так предполагаю что (Response response) летит из друго потока? Случаем не подтирается ли к моменту проверки String id?
    3) Точно ли существет Tab tab = tabPane.getTabs().get(i)?

    Рекомендации
    - самое, вот самое САМОЕ, важное, любые операции с ui проводить ТОЛЬКО в потоке javafx.
    - просто tab.getId() не вызывает npe? На всякий случай почитай как работает а лучше глянь исходники\доки, возможно что если id не установлен то вернется null а у null нет метода equals и отсюда npe.
    -возьми в руки дебаггер, поставь бряк на нужную строку и пошагово смотри что в какой переменной лежит.
    - очень критичный момент, не делай кашу в виде приема-обработки-отрисовки в одном месте, это какраз рождает проблемы с потоками. Подсказка, возьми коллекцию которая может многопоток, к примеру сетевой поток получил пакет и закинул ее в коллекцию после чего работает дальше, из этой коллекции 2й поток взял пакет и обрабатывает и по результату уже ,к примеру, отвечает обратно клиенту или отправляет обработанные данные в еще одну коллекцию из которой эти данные подхватит поток javafxui и отрисует. Т.е. сетевой поток получил и положил в коллекцию вообще не думая что там, зачем и куда. Поток бизнеслогики уже переваривает эти данные и решает что куда и как, ui поток не делает собственно ничего а только отрисовывает новые данные.

    На самом деле вангую что накосячил с потоками и отсюда такие приколы.
    Ответ написан
    1 комментарий
  • Чат на Java (Интерфейс клиента на JavaFX), как сделать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Вот уже второй вопрос задаете и все такойже бестолковый.
    Во первых причем тут 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 еслибы я был преподавателем, а Вы студентом, надавал бы по заднице и вообще заставил вместо такой работы при мне писать от и до всю логику програмки на бумаге а затем рассказывать зачем и почему так сделал.
    Ответ написан
    Комментировать
  • Авторизация и регистрация для desktop приложения на Java, как лучше сделать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если по простому,а судя по вопросу это именно так, то как то так.
    Для начала вникаем что такое авторизация и регистрация и из чего состоит. Получится что есть клиент и сервер.
    Клиент для регистрации должен сказать желаемый логин и пароль. Для авторизации можно чуть усложнить и работать по 2м схемам, Первый когда клиент скажет серверу логин и пароль. Во втором логин и токен.
    *Токен тут получается после авторизации, его генерирует сервер и сообщает клиенту. Используется для минимальной защиты потому как на клиенте можно не хранить пароль а хранить только логин и токен.
    Сервер в свою очередь ждет от клиентов логин и пароль, после получения которых проверяет в своем хранилище(бд например) и отвечает клиенту сообщением состояния(ок, логин занят,ошибка, пароль простой и т.д.). Дальше он ждет от этого клиента авторизацию по одному из двух способов которая может быть по логину и паролю, тут сервер ответит также сообщением(сгенерирует токен, ошибка пароль\логин не верный). 2й вариант что ожидается логин и токен , ответ будет (ок, ошибка токен не верный).

    Общаться клиент и сервер естественно будет по сети а вот как решать уже вам. Это может быть:
    1) Голые сокеты, проще для понимания т.к. никаких библиотек уже не будет и собственно весь протокол будет ваш.
    2) Использовать какую нибудь rest подобную систему. К примеру тупо взяв сервер с php и сделать нечто похожее(понимаете смысл надеюсь) на register.php и auth.php. Соответсвенно запросы с клиента уже будут идти тупо по http
    3) Взять че покруче и на порядок сложнее, к примеру netty. Круче сокетов но сложнее в пару сотен раз хотя сделать придется по сути тоже что и на сокетах.
    4) Какой нибудь сетевой движек, к примеру kryonet. Тут конечно уже ближе к играм но почему нет? Придется читать доки и следовать принципам библиотеки, ниразу не узнав что такое сериализации и зачем она нужна.

    Для практики потом можно усложнять схему, к примеру чтобы сервер уже не просто смотрел на логин и токен клиента но и еще на его ip чтобы он совпадал. Можно обернуть все это шифрованием, реализовываться будет по разному в зависимости от того каким путем пойдете. Реализовать еще и временный токен этой сессии или же тупо еще одним параметром от клиента типа что за устройство, тогда клиент под одним логином сможет авторизоваться одновременно с нескольких устройств и никто никому мешать не будет.

    В более серьезных проектах примерна такая же схема как я описал выше но доработанная в пару тысяч раз толще на любой чих и случай жизни.

    Конкретно для javafx я тут вообще в этой теме ничего не вижу да и вообще быть ничего не может т.к. это всеголишь библиотека для отрисовки интерфейса программы с коллекциями предназначенными помочь это сделать еще удобнее. Аналогично ей существуют еще ее предшественники awt и swing которые посложнее но темнеменее работают и легче по ресурсам.
    Ответ написан
    4 комментария
  • Как сделать, чтобы колонка была по всё ширине?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    биндишь ширину колонки на ширину таблицы типа такого column.prefWidthProperty().bind(tableView.widthProperty())
    Ответ написан
    Комментировать
  • Как правильно отловить исключения в многопоточном javafx-приложении?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    То что поток может рухнуть уже проблема, ловите исключения внутри потока от ваших функций, тот же запрос к бд\хттп а уже по исключению решать что делать, но ни как не ронять весь поток.
    Ответ написан
    Комментировать
  • Как изменить содержимое сцены, загруженной из fxml файла, сразу же после запуска программы?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Для начала почитать как работает javafx, после узнаете что конструктор использовать нельзя но вместо него нужно использовать этот интерфейс.
    Ответ написан
    Комментировать
  • Как можно добавить текст из Word или из ему подобных программ на форму в JavaFX?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Самый простой способ будет экспортировать документ ворда в html. на форме отображать его через WebView. Даже не придется тащить никаких зависимостей.
    Ответ написан
    Комментировать
  • Как найти высоту контейнера в JavaFX?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    В javafx у всех нод есть универсальный метод setUserData(object) и getUserData(). Вот самый простой способ будет что то типа combobox.setUserData(anchorPane2.getHeight() ) а потом уже непосредственно в самом методе куда передается только комбобокс получить его getUserData().
    Другой вариант это двигаться по вашему пути, я так понимаю что mainParrent это так сказать root окна, тогда получаете ноды в нем, вытаскиваете оттуда scrollPane, у scrollPane получаете ноды и берете в нем anchorPane2, у anchorPane2 получаете нужное свойство.
    Ответ написан
    4 комментария
  • Как сделать Drag'n'Drop интерфейс со связями между элементами?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Сам Drag'n'Drop делается достаточно просто, нодами интерфейса тоже достаточно просто управлять и кастомизировать, тут проблема может возникнуть скорее с io этих нод.
    Ответ написан
    Комментировать