[java] JavaFX 이벤트 버블링 및 캡처링

JavaFX는 이벤트 처리에 매우 유연한 기능을 제공합니다. 이벤트 버블링과 캡처링은 이벤트 핸들러가 어떻게 전파되는지에 대한 개념을 나타내며, JavaFX에서 이 개념을 구현하는 방법을 설명하겠습니다.

이벤트 버블링

이벤트 버블링은 하위 요소에서 시작된 이벤트가 상위 요소로 전파되는 현상입니다. 일반적으로, 사용자가 하위 요소에서 이벤트를 발생시키면 이벤트는 하위 요소의 부모 요소로 전파됩니다. 이벤트가 상위 요소로 전파될 때는 부모 요소에서 등록된 이벤트 핸들러가 호출됩니다.

예를 들어, 버튼이 포함된 패널을 생각해보겠습니다. 버튼을 클릭하면, 이벤트 버블링이 발생하여 패널의 이벤트 핸들러가 호출됩니다. 버튼에도 별도의 이벤트 핸들러가 등록되어 있는 경우, 먼저 버튼의 핸들러가 호출되고 이어서 패널의 핸들러가 호출됩니다.

이벤트 캡처링

이벤트 캡처링은 상위 요소에서 시작된 이벤트가 하위 요소로 전파되는 현상입니다. 캡처링은 버블링과 반대되는 개념으로, 이벤트가 상위 요소에서 하위 요소로 전파될 때는 하위 요소에서 등록된 이벤트 핸들러가 먼저 호출됩니다.

이벤트 캡처링은 JavaFX에서 기본적으로 활성화되어 있지 않습니다. 하지만, consume() 메서드를 사용하여 이벤트가 상위 요소로 전파되지 않도록 막을 수 있습니다.

JavaFX에서 이벤트 버블링 및 캡처링 활용하기

JavaFX에서 이벤트 버블링 및 캡처링을 활용하려면 EventTarget 인터페이스를 구현하는 UI 요소에서 이벤트 핸들러를 등록해야 합니다. 이벤트 핸들러를 등록할 때에는 버블링 또는 캡처링 단계에서 호출되는지를 나타내는 이벤트 타입을 명시해야 합니다.

아래는 JavaFX에서 이벤트 핸들러를 등록하는 예제 코드입니다.

Button button = new Button("Click me");
button.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        System.out.println("Button clicked");
    }
});

Pane pane = new Pane();
pane.getChildren().add(button);
pane.setOnMouseClicked(new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent event) {
        System.out.println("Pane clicked");
    }
});

위의 코드에서는 버튼과 패널에 각각 이벤트 핸들러를 등록하고, 버튼이나 패널을 클릭했을 때 각 핸들러가 호출되는 것을 확인할 수 있습니다.

결론

JavaFX의 이벤트 버블링과 캡처링은 UI 개발에 매우 유용한 기능입니다. 이를 통해 요소 간의 상호 작용을 더욱 유연하게 구현할 수 있으며, 이벤트 핸들러를 통해 사용자의 동작에 대한 응답을 적절히 처리할 수 있습니다.

참고 자료