2 回答
TA贡献1828条经验 获得超6个赞
问题是seatHolder窗格是在screenHolder窗格之前添加的。这导致screenHolder高于seatHolder。您可以通过添加 轻松看到这一点screenHolder.setStyle("-fx-background-color: #ffff00;");。在这种情况下,您的 EventHandler 永远不会被调用。您可以通过在处理程序方法中打印一些内容来检查这一点。
您可以通过更改将窗格添加到根窗格 ( root.getChildren().addAll(screenHolder, seatHolder);) 的顺序来解决此问题。第一个是最低的,最后一个是最高的。或者,您也可以更改布局。
我建议更改布局并使用BorderPane:
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 400, 400);
VBox seatHolder = new VBox(5);
seatHolder.setAlignment(Pos.CENTER);
// setup seatHolder as before but use
root.setCenter(seatHolder);
HBox screenHolder = new HBox();
Rectangle screen = new Rectangle(350, 25);
screen.widthProperty().bind(seatHolder.widthProperty());
screen.setFill(Color.LIGHTSLATEGREY);
screenHolder.getChildren().add(screen);
screenHolder.setAlignment(Pos.BOTTOM_CENTER);
root.setBottom(screenHolder);
primaryStage.setScene(scene);
primaryStage.show();
这应该适合你。在这种情况下,您甚至不需要 fxml 文件。
TA贡献1856条经验 获得超5个赞
我认为这可能r是绑定的值与在处理程序函数中使用它的时间的问题。
在您的 EventHandler 中,尝试以下操作
@Override
public void handle(MouseEvent event) {
Rectangle clicked = (Rectangle) event.getSource();
clicked.setFill(Color.GREEN);
}
而不是在处理程序中引用r。
编辑:看起来screenHolder覆盖了所有座位,因此您的点击永远不会注册。尝试设置screenHolder尺寸以匹配屏幕本身:
Rectangle screen = new Rectangle(350, 25);
screenHolder.setPrefWidth(screen.getWidth());
screenHolder.setPrefHeight(screen.getHeight());
screenHolder.prefWidthProperty().bind(screen.heightProperty());
screenHolder.prefHeightProperty().bind(screen.heightProperty());
添加回答
举报