여기 내 코드입니다. 내가 직접 작성한 내용을 복사하여 붙여 넣어 문제를 직접 볼 수 있습니다.3D 장면에서 2D 노드를 선택하는 방법은 무엇입니까?
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);
}
}
나는 사각형의 그리드가있는 서브 셀을 만듭니다. 사각형을 눌러서 색을 바꿀 배경이 필요합니다. 내가 깊이 버퍼
또는 모두 장면을 설정하지 않으면 나는 boardPane
- 이 2 상황에서 작동합니다. 하지만 상자를 추가하고 깊이 버퍼를 설정하면 사각형에 이벤트가 수신되지 않습니다. 대신
boardPane
이 수신합니다. 3D 장면에서 2D 노드와 관련이있는 것 같습니다.setPickOnBounds
,setDepthTest
,setMouseTransparent
하지만 아무 것도 작동하지 않았습니다.해결책은 무엇입니까?
감사합니다. 루트 패널에 이벤트를받지 못하게하고 자식 창에'pickOnBounds' 또는'setMouseTransparent'와 같은 이벤트를 수신하도록하는 방법이 있다고 생각했습니다. 실제로 실제 솔루션은 2D와 3D를 섞어서는 안된다고 보입니다. – Mark