javaFx vBox Stretch layout

236
12 апреля 2018, 14:30

Как сделать, чтобы некоторые элементы, расположенные в Vbox не растягивались. Скажем, там у меня есть Vbox, и там 2 элемента, изображение и таблица. И как мне сделать, чтобы при растягивании растягивалась только таблица

Answer 1

Советую все же пересмотреть компоновку Ваших элементов.
Из опыта советую разбивать элементы на как можно большее кол-во панелей, так как никогда не знаешь что будет необходимо добавить.
Предположу, что Вашу проблему можно решить комбинацией VBox и BorderPane.

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TableView;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    public class FxHelp extends Application {
        @Override
        public void start(Stage primaryStage) throws Exception {
            BorderPane borderPane = new BorderPane();
            VBox vBox = new VBox(new Button("TEST"));
            borderPane.setTop(vBox);
            borderPane.setCenter(new TableView<>());
            primaryStage.setScene(new Scene(borderPane));
            primaryStage.setWidth(400);
            primaryStage.setHeight(300);
            primaryStage.show();
        }
    }

Но лучше бы увидеть Ваш пример.

Answer 2

Внутри VBox для контроля вертикального растягивания в FXML используется атрибут VBox.vgrow, который указывается для внутренних элементов.

В java-коде для этого используется ограничение "vbox-vgrow", которое можно установить статическим методом VBox.setVgrow(Node, Priority).

Установите для таблицы значение "ALWAYS", а для изображения — либо "NEVER", либо уберите (по-умолчанию - "INHERIT").

Не забудьте, что на вертикальный размер также влияют свойства prefHeight, maxHeight, minHeight.

FXML:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<VBox prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
   <Pane style="-fx-background-color: green;">
         <children>
            <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" />
         </children>
      </Pane>
      <TableView fx:id="table1" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS">
        <columns>
          <TableColumn prefWidth="75.0" text="C1" />
          <TableColumn prefWidth="75.0" text="C2" />
        </columns>
      </TableView>
   </children>
</VBox>

Java-код:

    VBox.setVgrow(table1, Priority.ALWAYS);
    table1.setMaxHeight(Double.MAX_VALUE);
READ ALSO
iText PDF: запись HTML в PDF в кодировке UTF-8

iText PDF: запись HTML в PDF в кодировке UTF-8

Задача: из переданного HTML создать что-то наподобие печати (в заданных координатах) внутри существующего PDF-документаЯ нашел два варианта...

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

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

Есть List, типа String, хочу вывести все элементы в одну строчку, через запятую

245
Получение нового токена

Получение нового токена

Добрый день! Проблемка с авторизациейАвторизация в приложении осуществляется по логину и паролю от личного кабинета на сайте

234
Java DateFormat.

Java DateFormat.

Какого вида должна быть дата, при dateStyle=2Не нашел ответа в JavaDocs

199