ここに私のコードです。あなたは自分自身で問題を見るために、私が執筆したものをコピーして貼り付けることができます。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