JavaFx: SplitPane dynamici c полоса прокрутки - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с SplitPane внутри ScrollPane. Мне нужна расширяемая панель прокрутки, похожая на TableView, поэтому, когда у меня слишком много элементов, у меня есть полоса прокрутки, когда все мои элементы видны, затем скрывают полосу прокрутки.

ScrollPane имеет переключатель: fitToHeight, но оба true / false не выполняет ту работу, которая мне нужна Я загружу два скриншота, чтобы показать, что я имею в виду. Если он установлен на true, то у меня просто нет прокрутки, что не является решением, потому что у меня может быть слишком много данных, чтобы поместиться в одном окне, поэтому мне нужна прокрутка. Если он установлен на false, то у меня всегда есть полоса прокрутки, даже если в нижней части экрана нет данных для отображения.

Я хотел бы быть динамической полосой прокрутки c, поэтому при перетаскивании последний разделитель и нет места для размещения последнего элемента, должна появиться полоса прокрутки, когда для каждого элемента в SplitPane есть место, тогда его не следует отображать.

Любая идея, как это может быть достигнуто?

Соответствующий код:

F xml:

<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.VBox?>
<ScrollPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fitToWidth="true"
            fx:controller="test.Controller">
    <SplitPane fx:id="splitPane" orientation="VERTICAL">
        <VBox spacing="5" minHeight="20">
            <Label text="*Title*" VBox.vgrow="NEVER"/>
            <TextArea VBox.vgrow="ALWAYS"/>
        </VBox>
        <VBox minHeight="20" spacing="5">
            <Label text="*Title*" VBox.vgrow="NEVER"/>
            <TableView VBox.vgrow="ALWAYS">
                <columns>
                    <TableColumn/>
                </columns>
            </TableView>
        </VBox>
        <VBox minHeight="20" spacing="5">
            <Label text="*Title*" VBox.vgrow="NEVER"/>
            <TableView VBox.vgrow="ALWAYS">
                <columns>
                    <TableColumn/>
                </columns>
            </TableView>
        </VBox>
        <VBox minHeight="20" spacing="5">
            <Label text="*Title*" VBox.vgrow="NEVER"/>
            <TextArea VBox.vgrow="NEVER"/>
        </VBox>
        <padding>
            <Insets topRightBottomLeft="5"/>
        </padding>
    </SplitPane>
</ScrollPane>

Контроллер:

public class Controller implements Initializable {

    @FXML
    private SplitPane splitPane;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        splitPane.setDividerPositions(0d,.33d, .66d,1d);
    }

}

Основной:

public class Main extends Application {

    public void start(Stage primaryStage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("View.fxml"));
        ScrollPane pane = loader.load();
        primaryStage.setScene(new Scene(pane, 800, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Здесь у меня есть полоса прокрутки, даже если нет необходимости прокручивать, каждый элемент виден

Fit off

Здесь у меня нет полосы прокрутки

Fit on

...