我正在尝试创建一个程序,它能够使用滑块移动我位于其中心的圆圈。我无法弄清楚如何将圆圈连接到滑块,以便在滑块移动时移动。 任何帮助表示赞赏。这是我的代码:
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())
。但是有一个错误。
答案 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以获得更好的解释。