使用JavaFx中的滑块移动圆圈

时间:2017-05-10 19:17:35

标签: javafx slider

我正在尝试创建一个程序,它能够使用滑块移动我位于其中心的圆圈。我无法弄清楚如何将圆圈连接到滑块,以便在滑块移动时移动。 任何帮助表示赞赏。这是我的代码:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
    try {

        BorderPane root = new BorderPane();

        //Definisanje Hedera
        Label Seminarski = new Label("");
        Button Reset = new Button("Reset");
        Reset.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

            }
        });
        HBox HBoxHeader = new HBox();
        HBoxHeader.setPadding(new Insets(15, 12, 15, 12));
        HBoxHeader.setSpacing(10);
        HBoxHeader.setStyle("-fx-background-color: #ffffff;");
        HBoxHeader.getChildren().addAll(Seminarski, Reset);
        //Kraj Hedera

        //Definisanje Lopte
        Circle Lopta = new Circle(10, Color.RED);
        //Kraj Lopte

        //Definisanje Slajdera
        Slider Slajder = new Slider();
        //Kraj Slajdera

        Lopta.rateProperty().bind(Slajder.valueProperty());

        //Definisanje Futera
        HBox HBoxFooter = new HBox();
        HBoxFooter.setPadding(new Insets(15, 12, 15, 12));
        HBoxFooter.setSpacing(10);
        HBoxFooter.getChildren().addAll(Slajder);
        //Kraj Futera

        //Dodavanje u BorderPane
        root.setTop(HBoxHeader);
        root.setCenter(Lopta);
        root.setBottom(HBoxFooter);
        //Kraj Dodavanja

        Scene scene = new Scene(root,500,400);

        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

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

这是我尝试的Lopta.rateProperty().bind(Slajder.valueProperty())。但是有一个错误。

这是程序的样子: enter image description here

1 个答案:

答案 0 :(得分:2)

首先,不要使用BorderPane。它限制了您的节点布局控制。此外,不建议使用变量命名约定。在这个小应用程序中,我创建了一个VBox根,并添加了一个圆圈,一个按钮和一个滑块的窗格。我没有使用bind,因为我还没有使用它。我使用了一个值更改侦听器,当滑块的值发生变化时,它会移动圆圈。

map = new Object();
map[Citigroup] = 1;
map[HSBC] = 2;
map[Credit Suisse] = 3;

在处理滑块的更改侦听器时,您有三个对象。你有ObservableValue ov,Number old_val和Number new_val。如果在侦听器中使用System.out.println()语句,您会注意到每次移动滑块时,old_val都会显示滑块移动的值,new_val会显示滑块移动到的值。在上面的代码中,我们只关注new_val。

要使用滑块移动圆圈,您需要根据滑块的new_value设置圆圈的位置。 &lt; - 这是使用circle.setCenterX(new_value);

完成的

你应该去here以获得更好的解释。