오버레이를 클릭하면, 나는 몇 가지 다른를 포함하는 (두 가지 요소, (다시 캔버스와 상태 표시를 포함)를 BorderPane 다른 stackpane를 포함하는 stackpane이 UI 일들).
녹색 stackpane의 보이지 않는 영역에서 노란 경계선까지 클릭 할 수 있지만 녹색 stackpane (버튼과 같은 클릭 가능한 항목이있는)에서 실제 UI 물건을 클릭 할 수 있습니다.
어떻게하면 되나요?
오버레이를 클릭하면, 나는 몇 가지 다른를 포함하는 (두 가지 요소, (다시 캔버스와 상태 표시를 포함)를 BorderPane 다른 stackpane를 포함하는 stackpane이 UI 일들).
녹색 stackpane의 보이지 않는 영역에서 노란 경계선까지 클릭 할 수 있지만 녹색 stackpane (버튼과 같은 클릭 가능한 항목이있는)에서 실제 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 요소를 추가 할 수 있어야합니다. –
좋은 그림! :) –