【发布时间】:2023-04-01 12:21:01
【问题描述】:
这是我的代码。您可以复制粘贴并按照我在下面写的内容自己查看问题。
public class MyApp extends Application {
@Override
public void start(Stage stage) throws Exception {
Scene scene = new Scene(new MyView(), 100, 150);
stage.setScene(scene);
stage.show();
}
private class MyView extends BorderPane {
MyView() {
GridPane board = new GridPane();
int size = 3;
for (int i = 0; i < size*size; i++) {
BorderPane pane = new BorderPane();
pane.setMinSize(30, 30);
pane.setBackground(new Background(new BackgroundFill(Color.RED, null, null)));
pane.setBorder(new Border(new BorderStroke(null, BorderStrokeStyle.SOLID,
null, null, null)));
pane.setOnMousePressed(e -> {
PickResult pick = e.getPickResult();
Pane selectedNode = (Pane) pick.getIntersectedNode();
selectedNode.setBackground(new Background(new BackgroundFill(Color.GREEN, null, null)));
});
board.add(pane, i / size, i % size);
}
Box box = new Box(20d, 20d, 20d);
BorderPane boardPane = new BorderPane(box, null, null, board, null);
Group root = new Group(boardPane);
SubScene scene = new SubScene(root, USE_PREF_SIZE, USE_PREF_SIZE, true, SceneAntialiasing.BALANCED);
scene.widthProperty().bind(widthProperty());
scene.heightProperty().bind(heightProperty());
setCenter(scene);
}
}
public static void main(String[] args) throws Exception {
launch(args);
}
}
我创建了一个带有正方形网格的子场景。当我按下一个正方形时,我希望它的背景改变颜色。这适用于两种情况:
- 如果我不将 Box 添加到
boardPane - 如果我不使用深度缓冲区设置场景
或两者兼而有之。但是,如果我同时添加框并设置深度缓冲区,则方块不会接收到事件。取而代之的是 boardPane 接收它。我想这与 3D 场景中的 2D 节点有关。
我尝试设置这些方法的组合:setPickOnBounds、setDepthTest、setMouseTransparent,但没有任何效果。
解决办法是什么?
【问题讨论】:
标签: javafx event-handling javafx-2 javafx-8 depth-buffer