7

スタックペインがあります。スタック ペインに 2 番目のアイテムを追加すると、両方が表示されますが、最初のアイテムをクリックできなくなりました。「クリック不可」になります。

.setonmouse で定義したものは機能しません。それは私の2番目のアイテムで機能します。スタック ペイン内の順序を入れ替えると、もう一方は機能しますが、両方は機能しません。

これに対する修正はありますか?これは私のプログラムがどのように見えるかです:

「グリッド」を常に中央に配置したい。列の中央に左にボタンがあり、後で右にボタンがあり、グリッドの上にボタン/テキストがあり、後で余白にもボタンがあります。

すべてクリックできるようにしたい。

http://img688.imageshack.us/img688/6025/examplerg.png

4

2 に答える 2

4

任意のペインを「マウス透過」にして、クリック イベントを消費せず、その下のスタックにパススルーできるようにすることができます。

以下にサンプル コードを示します。この例では、スタック内に 4 つのペインを設定します。最初は mainPane だけがクリックを受け入れます。

StackPane rootPane = new StackPane();
VBox mainPane = new VBox(80);

BorderPane helpOverlayPane = new BorderPane();
helpOverlayPane.setMouseTransparent(true);

Canvas fullScreenOverlayCanvas = new Canvas();
fullScreenOverlayCanvas.setMouseTransparent(true);

VBox debugPane = new VBox();
debugPane.setAlignment(Pos.BASELINE_RIGHT);
AnchorPane debugOverlay = new AnchorPane();
debugOverlay.setMouseTransparent(true);
debugOverlay.getChildren().add(debugPane);
AnchorPane.setBottomAnchor(debugPane, 80.0);
AnchorPane.setRightAnchor(debugPane, 20.0);

rootPane.getChildren().addAll(mainPane, fullScreenOverlayCanvas, debugOverlay, helpOverlayPane);

ここで、キャンバスを使用して上に描画する場合は、そのスタックに対してのみマウスの透明度を false に変更し、その上にあるすべてのペインをマウスの透明度に保ちます。

fullScreenOverlayCanvas.setMouseTransparent(false);
debugOverlay.setMouseTransparent(true);
fullScreenOverlayCanvas.setVisible(true);

doSomethingWithCanvasThatNeedsMouseClicks();

PS私は持っていたコードを編集したので、そのままでは動かないかもしれません。また、ペインの一部のみを透明にする方法については、 JavaFX Pass MouseEvents through Transparent Node to Childrenの説明を参照してください。

于 2014-01-11T12:23:45.100 に答える
4

StackPaneアイテムを Z オーダーで並べます。後者は前者の上にあります。したがって、2 番目の項目はすべてのマウス クリックを取得し、最初の項目 (2 番目にカバーされている) は何も取得しません。

説明したレイアウトには、BorderPane を使用できます。

public void start(Stage stage) throws Exception {
    BorderPane root = new BorderPane();
    root.setCenter(new Rectangle(100,100, Color.RED));
    root.setLeft(new Rectangle(10,10, Color.BLUE));
    root.setRight(new Rectangle(10,10, Color.CYAN));

    stage.setScene(new Scene(root,300,300));

    stage.show();
}
于 2012-03-28T09:21:50.170 に答える