を重ねてクリックして、私はいくつかの他が含まれている(2つの要素(再びキャンバスとステータスバーが含まれています)BorderPaneと別のstackpaneを含むstackpaneを持っていますUIの事柄)。
緑色のスタックペインの目に見えない領域から黄色の境界線までクリックしても、緑色のスタックパネル(ボタンなどのクリック可能なものなど)上の実際のUIのものをクリックできるようにしたいと考えています。
どうすればよいですか?
を重ねてクリックして、私はいくつかの他が含まれている(2つの要素(再びキャンバスとステータスバーが含まれています)BorderPaneと別のstackpaneを含むstackpaneを持っていますUIの事柄)。
緑色のスタックペインの目に見えない領域から黄色の境界線までクリックしても、緑色のスタックパネル(ボタンなどのクリック可能なものなど)上の実際のUIのものをクリックできるようにしたいと考えています。
どうすればよいですか?
stackPane.setPickOnBounds(false);
を使用できます。これは、スタックペインが、クリックされたポイントが透明ではない場合(マウス操作のターゲットとして識別するためのデフォルトの動作ではなく)、マウス操作のターゲットとしてのみ識別されることを意味しますクリックはその範囲内にあります)。あなたは、単にそれが根底にあるスタックペインに直接含まれているUI要素を追加することができますように、上部スタックペインには、不要と思われることを
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ClickThroughStackPane extends Application {
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(400,400);
canvas.setOnMouseClicked(e -> System.out.println("Mouse click: canvas"));
HBox statusBar = new HBox(new Label("Status"));
statusBar.setOnMouseClicked(e -> System.out.println("Mouse click: statusBar"));
BorderPane borderPane = new BorderPane(canvas, statusBar, null, null, null);
Button button = new Button("Click");
button.setOnAction(e -> System.out.println("Button pressed"));
StackPane stack = new StackPane(button);
stack.setPickOnBounds(false);
StackPane root = new StackPane(borderPane, stack);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
注:ここでは
はSSCCEです。前の例は簡単に書き直すことができます:import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ClickThroughStackPane extends Application {
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(400,400);
canvas.setOnMouseClicked(e -> System.out.println("Mouse click: canvas"));
HBox statusBar = new HBox(new Label("Status"));
statusBar.setOnMouseClicked(e -> System.out.println("Mouse click: statusBar"));
BorderPane borderPane = new BorderPane(canvas, statusBar, null, null, null);
Button button = new Button("Click");
button.setOnAction(e -> System.out.println("Button pressed"));
StackPane root = new StackPane(borderPane, button);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
本当に緑色のスタックペインが必要ですか?基本的なスタックペインに直接含まれるUI要素を追加できるように思えます。 –
素敵なドローイング! :) –