두 개의 레이어 (= AnchorPanes) 중 하나를 다른 하나를 StackPane으로 쌓았습니다. 그래서 두 레이어가 전체 장면을 채 웁니다. 문제는 최상위 레이어 만 마우스 이벤트를 수신한다는 것입니다. 장면이 빌드가 얼마나기본 레이어에서 마우스 이벤트가 무시됩니다.
그게 전부 :
만 버튼 B 이벤트하지만 버튼 A를하지 클릭 받는다. 내가 투명 마우스 (layerB.setMouseTransparent(true)
)에 레이어 B를 설정하면
는 버튼 A는 마우스 이벤트를 수신합니다. 그러나 마우스 투명한 효과도 모든 자식에게 적용되므로 버튼 B는 더 이상 마우스 이벤트를받지 못합니다.
마우스 이벤트를 수신하기 위해 버튼 A와 버튼 B를 얻는 방법은 무엇입니까?
public class LayerTest extends Application {
@Override
public void start(final Stage primaryStage) throws Exception {
final Node layerA = createLayerA();
final Node layerB = createLayerB();
final Parent root = new StackPane(layerA, layerB);
final Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setWidth(250);
primaryStage.setHeight(200);
primaryStage.show();
}
private Node createLayerA() {
final AnchorPane layerA = new AnchorPane();
final Button buttonA = new Button("Button A");
AnchorPane.setLeftAnchor(buttonA, 10d);
AnchorPane.setTopAnchor(buttonA, 10d);
buttonA.setOnMouseClicked(e -> System.out.println("Button A clicked"));
layerA.getChildren().setAll(buttonA);
return layerA;
}
private Node createLayerB() {
final AnchorPane layerB = new AnchorPane();
final Button buttonB = new Button("Button B");
AnchorPane.setRightAnchor(buttonB, 10d);
AnchorPane.setBottomAnchor(buttonB, 10d);
buttonB.setOnMouseClicked(e -> System.out.println("Button B clicked"));
layerB.getChildren().setAll(buttonB);
return layerB;
}
public static void main(String[] args) {
launch(args);
}
}
[JavaFX 2의 기본 노드로의 이벤트 발송] (http://stackoverflow.com/questions/15248716/javafx-2-event-dispatching-to-underlying-nodes) 및 [JavaFx, 이벤트 차단/소비] (힌트는 http://stackoverflow.com/questions/19498867/javafx-event-interception-consumption)을 참조하십시오. 그러나 레이아웃 계층을 변경하는 것이 더 적절할 것입니다. 다른 모든 해결 방법은 hackish처럼 보일 것이고 앞으로 머리 속에서 머리를 숙여 다룰 것입니다. –
@UlukBiy가 정확하며 레이아웃의 계층 구조를 변경해야합니다. 두 개를 사용하는 대신 하나의 앵커 패널을 사용해 볼 수도 있습니다. 유사한 문제가 [여기에 설명되어 있습니다] (http://stackoverflow.com/questions/24510845/stackpane-mouseclick-to-be-listened-by-both-its-children) – ItachiUchiha