[java] JavaFX 메뉴와 팝업 메뉴 구현하기

이번 포스트에서는 JavaFX를 사용하여 메뉴와 팝업 메뉴를 구현하는 방법에 대해 알아보겠습니다.

1. 메뉴 구현하기

JavaFX에서 메뉴를 구현하려면 MenuBar, MenuMenuItem 클래스를 사용해야 합니다.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class MenuExample extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane root = new BorderPane();
        
        MenuBar menuBar = new MenuBar();
        
        Menu fileMenu = new Menu("File");
        MenuItem newItem = new MenuItem("New");
        MenuItem openItem = new MenuItem("Open");
        MenuItem saveItem = new MenuItem("Save");
        MenuItem exitItem = new MenuItem("Exit");
        
        fileMenu.getItems().addAll(newItem, openItem, saveItem, exitItem);
        
        menuBar.getMenus().add(fileMenu);
        root.setTop(menuBar);
        
        Scene scene = new Scene(root, 400, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

위의 예제에서는 MenuBarMenu를 추가하고, 각 메뉴에 MenuItem을 추가합니다. 그리고 MenuBar를 최상위 컨테이너인 BorderPane의 상단에 위치시킵니다.

2. 팝업 메뉴 구현하기

팝업 메뉴는 오른쪽 마우스 버튼을 클릭했을 때 나타나는 메뉴입니다. JavaFX에서 팝업 메뉴를 구현하려면 ContextMenu 클래스를 사용해야 합니다.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class PopupMenuExample extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane root = new AnchorPane();
        Scene scene = new Scene(root, 400, 300);
        
        Rectangle rectangle = new Rectangle(100, 100, Color.BLUE);
        
        ContextMenu contextMenu = new ContextMenu();
        MenuItem redItem = new MenuItem("Red");
        MenuItem greenItem = new MenuItem("Green");
        MenuItem blueItem = new MenuItem("Blue");
        
        redItem.setOnAction(event -> rectangle.setFill(Color.RED));
        greenItem.setOnAction(event -> rectangle.setFill(Color.GREEN));
        blueItem.setOnAction(event -> rectangle.setFill(Color.BLUE));
        
        contextMenu.getItems().addAll(redItem, greenItem, blueItem);
        
        rectangle.setOnContextMenuRequested(event -> {
            contextMenu.show(rectangle, event.getScreenX(), event.getScreenY());
        });
        
        root.getChildren().add(rectangle);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

위의 예제에서는 ContextMenu를 생성하고, MenuItem을 추가합니다. 각 MenuItem의 클릭 이벤트에서는 사각형의 색을 변경합니다. ContextMenusetOnContextMenuRequested 메소드를 사용하여 사용자가 사각형을 마우스 오른쪽 버튼으로 클릭했을 때 화면에 표시됩니다.

이렇게 JavaFX를 사용하여 메뉴와 팝업 메뉴를 구현할 수 있습니다. 자세한 내용은 JavaFX 공식 문서를 참조하시기 바랍니다.