ScalaFX Dialog onShown работает до того, как появится диалог [duplicate]

Этот веб-компонент изменяет размер шрифта, поэтому ширина внутреннего текста соответствует ширине контейнера. Проверьте demo .

Вы можете использовать его следующим образом:

Lorem Ipsum

2
задан Walker 25 January 2016 в 06:51
поделиться

1 ответ

Имейте в виду, что кнопка onAction кнопки вызывается в потоке JavaFX, поэтому вы фактически останавливаете свой поток пользовательского интерфейса в течение 5 секунд. Когда поток пользовательского интерфейса не замораживается в конце этих пяти секунд, оба изменения применяются последовательно, поэтому вы можете видеть только второе.

Вы можете исправить это, выполнив весь код выше в новом потоке:

    Button button = new Button();
    button.setOnAction(event -> {
        Thread t = new Thread(() -> {
            Platform.runLater(() -> field.setText("START"));
            try {
                Thread.sleep(5000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            Platform.runLater(() -> field.setText("END"));
        });

        t.start();
    });
5
ответ дан Itai 18 August 2018 в 00:32
поделиться
  • 1
    Спасибо ... Это работает !!! – Walker 25 January 2016 в 08:00
  • 2
    хорошее объяснение того, почему - хотя обратите внимание, что fx поставляется с обширной поддержкой высокого уровня анимации :-) @Walker – kleopatra 25 January 2016 в 15:00
  • 3
    Первый runLater не нужен. Поскольку обработчик событий работает в потоке приложения, field.setText("START") можно безопасно перемещать «снаружи», из Runnable. – fabian 13 June 2016 в 08:36
Другие вопросы по тегам:

Похожие вопросы: