提问者:小点点

JavaFX滚动条场景生成器


因此,基本上我正尝试从Scene Builder向我的JavaFX应用程序添加滚动条,但由于我刚刚开始学习JavaFX,我真的不知道如何做。例如,我正在使用StackPane,我有某种形式的表单,我不能用预定义的窗口大小来包装,所以我需要滚动条,以便用户可以滚动表单。我参考了Oracle提供的这段代码:http://docs . Oracle . com/Java FX/2/ui _ controls/scrollbarsample . Java . html < br >但无济于事。我不知道这是否是因为StackPane,因为当我在HBox中运行这个代码片段(正如他们给的)时,它工作得很好。这就是我所做的:

scrollBar.setLayoutX(700.0d);
scrollBar.setMin(0);
scrollBar.setOrientation(Orientation.VERTICAL);
scrollBar.setPrefHeight(600);
scrollBar.setMax(1000);

    scrollBar.valueProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> ov,
            Number old_val, Number new_val) {
                pane.setLayoutY(-new_val.doubleValue());
        }
    });

scrollBar-场景生成器
窗格中ScrollBar组件的fx: id-场景生成器中StackPanel组件的fx:id

所以基本上所有这些代码的行为都是默认的,没有任何变化。我将不胜感激任何帮助。


共1个答案

匿名用户

也许你可以使用滚动条?我给你做了一个小表格,对它的窗口来说太小了。正如您希望看到的,表单将在其scrollPane中滚动。

类1:

  import javafx.application.Application;
  import javafx.scene.Scene;
  import javafx.stage.Stage;

  public class RunTest extends Application {
  public static void main(String[] args) {
     launch(args);
  }

  @Override
  public void start(Stage primaryStage) {
     primaryStage.setTitle("Test");
     Test test = new Test();
     Scene scene = new Scene(test, 100, 100);
     primaryStage.setScene(scene);
     primaryStage.show();
  }
 }

第2类:

 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.scene.control.*;
 import javafx.scene.layout.*;

 public class Test extends StackPane {

     ScrollPane scrollPane = new ScrollPane();
     VBox vBox = new VBox();
     TextField aTextField = new TextField();
     Label aLabel = new Label("a Field");
     TextField aTextField2 = new TextField();
     Label aLabel2 = new Label("a Field2");
     TextField aTextField3 = new TextField();
     Label aLabel3 = new Label("a Field3");
     Button button = new Button("Press");

     public Test() {
         setMaxSize(100, 50);
         vBox.setMaxSize(95, 45);
         vBox.getChildren().setAll(aLabel, aTextField, aLabel2, aTextField2, aLabel3, aTextField3, button);
         scrollPane.setContent(vBox);
         scrollPane.setPrefSize(95,45);
         getChildren().addAll(scrollPane);
     }
 }

若要在没有滚动窗格的情况下查看,请将这3行更改为如下所示:

 //        scrollPane.setContent(vBox);
 //        scrollPane.setPrefSize(95,45);
           getChildren().addAll(vBox);