GroupBox / TitledBorder в JavaFX 2?

Есть ли что-то вроде GroupBox или TitledBorder на JavaFX 2?

Спасибо за любой намек 🙂

Нет такого стандартного контроля, но его легко создать самостоятельно. Вот пример реализации:

/** Places content in a bordered pane with a title. */ class BorderedTitledPane extends StackPane { BorderedTitledPane(String titleString, Node content) { Label title = new Label(" " + titleString + " "); title.getStyleClass().add("bordered-titled-title"); StackPane.setAlignment(title, Pos.TOP_CENTER); StackPane contentPane = new StackPane(); content.getStyleClass().add("bordered-titled-content"); contentPane.getChildren().add(content); getStyleClass().add("bordered-titled-border"); getChildren().addAll(title, contentPane); } } 

И сопроводительный css для него:

 .label { -fx-font: 28px Vivaldi; } .bordered-titled-title { -fx-background-color: white; -fx-translate-y: -16; } .bordered-titled-border { -fx-content-display: top; -fx-border-insets: 20 15 15 15; -fx-background-color: white; -fx-border-color: black; -fx-border-width: 2; } .bordered-titled-content { -fx-padding: 26 10 10 10; } 

Код из примера, который я создал в ответ на сообщение в форуме форума Oracle JavaFX «Эквивалент BorderFactory.createTitleBorder» .

Вывод примерной программы приведен ниже.

Геттисберге

Я использовал TitledPane с setCollapsible(false) . Он выглядит более последовательным, чем использование стилей CSS. Вот результат

введите описание изображения здесь

FXML-версия ответа драгоценности:

TitledBorder (я переименовал BorderedTitlePane в TitledBorder)

 package com.example.controls; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; public class TitledBorder extends StackPane { private Label titleLabel = new Label(); private StackPane contentPane = new StackPane(); private Node content; public void setContent(Node content) { content.getStyleClass().add("bordered-titled-content"); contentPane.getChildren().add(content); } public Node getContent() { return content; } public void setTitle(String title) { titleLabel.setText(" " + title + " "); } public String getTitle() { return titleLabel.getText(); } public TitledBorder() { titleLabel.setText("default title"); titleLabel.getStyleClass().add("bordered-titled-title"); StackPane.setAlignment(titleLabel, Pos.TOP_CENTER); getStyleClass().add("bordered-titled-border"); getChildren().addAll(titleLabel, contentPane); } } с package com.example.controls; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; public class TitledBorder extends StackPane { private Label titleLabel = new Label(); private StackPane contentPane = new StackPane(); private Node content; public void setContent(Node content) { content.getStyleClass().add("bordered-titled-content"); contentPane.getChildren().add(content); } public Node getContent() { return content; } public void setTitle(String title) { titleLabel.setText(" " + title + " "); } public String getTitle() { return titleLabel.getText(); } public TitledBorder() { titleLabel.setText("default title"); titleLabel.getStyleClass().add("bordered-titled-title"); StackPane.setAlignment(titleLabel, Pos.TOP_CENTER); getStyleClass().add("bordered-titled-border"); getChildren().addAll(titleLabel, contentPane); } } 

Использование FXML:

     

Не забывайте стильный лист!

Используйте этот CSS для обычного шрифта:

 .bordered-titled-title { -fx-background-color: white; -fx-translate-y: -10; /* play around with this value when changing the title font to get a vertically centered title */ } .bordered-titled-border { -fx-content-display: top; -fx-border-insets: 20 15 15 15; -fx-background-color: white; -fx-border-color: black; -fx-border-width: 2; } .bordered-titled-content { -fx-padding: 26 10 10 10; } 

Используя этот CSS, теперь он выглядит так:

введите описание изображения здесь

Обновление: проблемы, когда заголовок длиннее содержимого:

введите описание изображения здесь Любой намек на устранение этой проблемы?

Вот документ FXML, который можно загрузить в SceneBuilder, который имеет аналогичную функциональность:

           

Если вам нужно увеличить размер текста / frameworks метки, вам нужно будет только отредактировать CSS и верхний символ дочерней AnchorPane и первый аргумент -fx-border-insets родительской AnchorPane.

Насколько мне известно, GroupBox – это обычный групповой макет.

TitledBorder – выглядит как TitledPane (который обычно является компонентом Accordion, но может быть отдельно существующим элементом управления).

Аналоги JavaFX-2 отличаются от ваших (но не значительно), и, как обычно, вы можете использовать различные способы изменения внешнего вида управления: css, замена скина управления и т. Д.

Вот реализация GroupBox на основе TitledPane. Он предоставляет три метода для настройки заголовка, содержимого и содержимого GroupBox.

 public final class GroupBox extends Parent { private StackPane _stackPane; private TitledPane _titledPane; public GroupBox() { _stackPane = new StackPane(); _titledPane = new TitledPane(); setContentPadding(new Insets(10)); _titledPane.setCollapsible(false); _titledPane.setContent(_stackPane); super.getChildren().add(_titledPane); } public GroupBox(String title, Node content) { this(); setText(title); setContent(content); } public GroupBox(String title, Node content, Insets contentPadding) { this(title, content); setContentPadding(contentPadding); } public void setText(String value) { _titledPane.setText(value); } public void setContent(Node node) { _stackPane.getChildren().add(node); } public void setContentPadding(Insets value) { _stackPane.setPadding(value); } } 
  • Что означает параметр LayoutInflater attachToRoot?
  • RecyclerView внутри DrawerLayout в LinearLayout, не прокручиваемый / кликабельный
  • как читать значение из string.xml в android?
  • Layout Layers? Z-Axis?
  • Передача растрового изображения между двумя действиями
  • Как сделать повторное фоновое изображение приложения
  • Ошибка раздувания fragmentа classа
  • Android: Как растянуть изображение до ширины экрана при сохранении пропорций?
  • Как создать фиксированный нижний колонтитул в макете android?
  • Добавление расширяемогоListView в NavigationView
  • Android: макет xml для списка с различными элементами
  • Давайте будем гением компьютера.