Объедините Javafx Progress Bar с методом загрузки данных - PullRequest
0 голосов
/ 19 марта 2019

У меня есть метод, который загружает данные из БД, используя соединение Hibernate. Я хочу добавить к этому методу - индикатор выполнения - для отображения окончания загрузки данных.

это мой метод загрузки данных:

    @FXML
    private JFXProgressBar progressBar;

    @FXML
    private JFXTextArea textArea;

    @FXML
        void executeQuery(MouseEvent event) {
            //LOAD DATA FROM DB USING HIBERNATE AND SET TEXT TO TEXTAREA
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("firebird_config_file");
            EntityManager entityManager = entityManagerFactory.createEntityManager();

            TypedQuery<Programy> query1 =  entityManager.createQuery("select p from Programy p", Programy.class);
            String resultOfTheQuery="";
            for (Programy programy  : query1.getResultList() ) {
                String tmp= "Nazwa programu: " + programy.getExeNazwa() + " Kod programu: " + programy.getKodProg()+" Wersja: "+programy.getWersja()+"\n";
                resultOfTheQuery+=tmp;
            }
            textArea.setText(resultOfTheQuery);
        }

это скриншот из моей сцены (я использую файлы fxml): enter image description here

1 Ответ

3 голосов
/ 19 марта 2019

Я думаю, что это трудно (если не невозможно) достичь.

Если вы думаете о запросе SQL в традиционном смысле, он не знает, сколько существует наборов данных и сколько времени это займет.,Я не знаю ни одного инструмента SQL (например, DB Visualizer, DataGrip и т. Д.), Который показывает индикатор выполнения и правильную оценку того, сколько времени это займет, потому что он всегда будет зависеть от объема данных в таблице.

Должен быть способ измерения, когда данные загружены на 25% / 50% / 75% / ....И единственное, что может занять много времени в вашем коде, это вызов entityManager.createQuery(...).

Другое решение

Я бы предложил удалить индикатор выполнения и добавить что-то вроде вращателяпоказать, что идет загрузка данных. JFoenix имеет симпатичный счетчик дизайна материалов.

Вы также можете добавить простой текст "loading data ...".

Редактировать (длясделайте его более заметным): Как правильно заметил @Slaw, вам также необходимо поместить вызов entityManager.createQuery(...) в новую ветку.В противном случае поток пользовательского интерфейса может зависнуть, если запрос занимает больше времени.

...