В 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" />
Итак, я проверил, что происходит при установке minWidth на 300:
Что я делаю неправильно?
Обновлять
Чтобы проверить, игнорирует ли сцена minWidth кнопки, я обернул кнопку в HBox и добавил поле вокруг кнопки.
Если для minWidth установлено значение USE_COMPUTED_SIZE, результат будет следующим:
Когда я устанавливаю minWidth на 200, я получаю:
Что хорошо - за исключением того, что мне нужно вычислить размер.
Использование USE_COMPUTED_SIZE не позволяет нет предотвращать многоточие. (Просто распечатайте результат button.minWidth(-1) после первого прохода макета.) Использование USE_PREF_SIZE для minWidth и USE_COMPUTED_SIZE для prefWidth установило бы ограничения правильно, но изменение размера сцены (и сцены) может заставить узел нарушить ограничения по размеру. Вам необходимо установить minWidth сцены, которую вы используете для отображения сцены.
@fabian Это работает! Пожалуйста, опубликуйте это как ответ, чтобы я мог принять это :)




В документации JavaFX API говорится:
Defaults to the
USE_COMPUTED_SIZEflag, which means thatminWidth(forHeight)will return the region's internally computed minimum width.Setting this value to the
USE_PREF_SIZEflag will causeminWidth(forHeight)to return the region's preferred width, enabling applications to easily restrict the resizability of the region.
Вам следует использовать
USE_PREF_SIZE.USE_COMPUTED_SIZE- это размер, который, по мнению элемента управления, он может отображать сам, дляButtonон очень мал, потому что он может помещатьellipsisдля текста.