因此,基本上我正尝试从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
所以基本上所有这些代码的行为都是默认的,没有任何变化。我将不胜感激任何帮助。
也许你可以使用滚动条?我给你做了一个小表格,对它的窗口来说太小了。正如您希望看到的,表单将在其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);