JavaFX Button minWidth игнорируется

В JavaFX, когда для minWidth компонента задано значение USE_COMPUTED_SIZE, минимальная ширина компонента рассчитывается на основе его содержимого.

Хотя я успешно использовал это для многих компонентов, похоже, что для Button он работает не так, как ожидалось:

<?xml version = "1.0" encoding = "UTF-8"?>

<?import javafx.scene.control.Button?>


<Button mnemonicParsing = "false" text = "This should always be visible" xmlns = "http://javafx.com/javafx/10.0.1" xmlns:fx = "http://javafx.com/fxml/1" />

JavaFX Button minWidth игнорируетсяJavaFX Button minWidth игнорируется

Итак, я проверил, что происходит при установке minWidth на 300:

JavaFX Button minWidth игнорируетсяJavaFX Button minWidth игнорируется

Что я делаю неправильно?

Обновлять

Чтобы проверить, игнорирует ли сцена minWidth кнопки, я обернул кнопку в HBox и добавил поле вокруг кнопки. Если для minWidth установлено значение USE_COMPUTED_SIZE, результат будет следующим:

JavaFX Button minWidth игнорируетсяJavaFX Button minWidth игнорируется

Когда я устанавливаю minWidth на 200, я получаю:

JavaFX Button minWidth игнорируется

Что хорошо - за исключением того, что мне нужно вычислить размер.

Вам следует использовать USE_PREF_SIZE. USE_COMPUTED_SIZE - это размер, который, по мнению элемента управления, он может отображать сам, для Button он очень мал, потому что он может помещать ellipsis для текста.

Jai 02.11.2018 09:31

Использование USE_COMPUTED_SIZE не позволяет нет предотвращать многоточие. (Просто распечатайте результат button.minWidth(-1) после первого прохода макета.) Использование USE_PREF_SIZE для minWidth и USE_COMPUTED_SIZE для prefWidth установило бы ограничения правильно, но изменение размера сцены (и сцены) может заставить узел нарушить ограничения по размеру. Вам необходимо установить minWidth сцены, которую вы используете для отображения сцены.

fabian 02.11.2018 09:33

@fabian Это работает! Пожалуйста, опубликуйте это как ответ, чтобы я мог принять это :)

Michel Jung 02.11.2018 10:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
465
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документации JavaFX API говорится:

Defaults to the USE_COMPUTED_SIZE flag, which means that minWidth(forHeight) will return the region's internally computed minimum width.

Setting this value to the USE_PREF_SIZE flag will cause minWidth(forHeight) to return the region's preferred width, enabling applications to easily restrict the resizability of the region.

Другие вопросы по теме