java - 将滚动条放入 JavaFX Pane 中

标签 java eclipse javafx scrollbar pane

我只是在做一个小项目,并开始接触 JavaFX。 我有一个问题,但我不知道任何解决方案..

所以我设法将滚动条(包括监听器)带入根目录。 但监听器不起作用。

我想在另一个下面添加许多组合框,当我达到场景大小(LayoutX)时,应该可以向下滚动。

如何解决我的问题?

package application;

import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.Pane;
import javafx.scene.text.*;
import javafx.stage.Stage;
import application.XMLActions;;

public class Main extends Application {

    /**
     * Globale Variablen
     */
     int abstandszaehler = 0;
     private Pane root = new Pane();        
     private ScrollBar sB = new ScrollBar();
     private XMLActions xA = new XMLActions();




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

    @Override
    public void start(Stage primaryStage) {

        primaryStage.setTitle("XML-Zeilenersteller");
        primaryStage.setResizable(false);


        /**
         * Elemente für die Root
         */
        //Buttons
        Button newXMLLine = new Button();
        newXMLLine.setText("Einfügen neuer XML-Zeile");
        newXMLLine.setLayoutX(735);
        newXMLLine.setLayoutY(80);
        newXMLLine.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                setComboBox();
            }
        });

        Button newXMLDocument = new Button();
        newXMLDocument.setText("Erstelle XML-Dokument");
        newXMLDocument.setLayoutX(735);
        newXMLDocument.setLayoutY(550);
        newXMLDocument.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Test2");
            }
        });

        //Überschrift
        Text header = new Text(105, 50, "XML Lines Creator");
        header.setFont(new Font(30)); header.setStyle("-fx-underline: true;");

        //Scrollbar
        sB.setLayoutX(715);
        sB.setLayoutY(80);
        sB.setMin(0);
        sB.setOrientation(Orientation.VERTICAL);
        sB.setPrefHeight(500);
        sB.setMax(360);
        sB.setUnitIncrement(30);
        sB.setBlockIncrement(35);
        sB.valueProperty().addListener((ObservableValue<? extends Number> ov, 
                Number old_val, Number new_val) -> {
                    System.out.println(-new_val.doubleValue());
            });          

        /**
         *  Hauptseite als Root
         * Rootbearbeitungen
         */
        root.setStyle("-fx-background-color: lightsteelblue");                                                      
        root.getChildren().addAll(sB,newXMLDocument,header,newXMLLine );


        //Scene setzen
        Scene mainScene = new Scene(root, 900, 600);
        primaryStage.setScene(mainScene);
        primaryStage.show();


    }


    public void setComboBox(){
        ComboBox cB = new ComboBox(xA.getList());   
        root.getChildren().add(cB);
        cB.setLayoutX(80);
        cB.setLayoutY(80 + abstandszaehler);
        abstandszaehler = abstandszaehler + 30;

    }        
}

编辑1: 我在监听器中的代码方面取得了一些进展:

root.setLayoutY(-new_val.doubleValue());

最佳答案

Pane 替换为 ScrollPane。在 ScrollPane 上,您可以定义滚动条的策略。

如果你这样定义它,它的行为就像一个Pane:

ScrollPane sp = new ScrollPane();
sp.setHbarPolicy(ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollBarPolicy.NEVER);

看看this article由甲骨文公司提供。

关于java - 将滚动条放入 JavaFX Pane 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34789319/

相关文章:

JavaFX 未随 Java 8 一起导入

java - 为什么我无法启动 JavaFX 程序?

java - 迭代非列表的最短方法?

javascript - 在浏览器中打开文件而不是下载(包括 .doc、.xls 等文件)

java - Eclipse 热代码替换不起作用

java - 如何在 Eclipse 中重置详细信息格式化程序

java - fxml 中返回空指针的按钮

Java,托管应用程序关闭作为对 CTRL^D 的响应

java - 使用 HashMap 将数据解析为 JSON

eclipse - Grails 3.2.9和Eclipse Luna 4.4.2