Menu kontekstowe na JavaFX Canvas możemy utworzyć następująco:
package rozdzial16c; import javafx.application.Application; import javafx.geometry.Side; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Listing16_08 extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { try { ContextMenu cm = new ContextMenu(); MenuItem mi1 = new MenuItem("Pomoc"); mi1.setOnAction( e -> System.out.println("Kliknąłeś przycisk 'Pomoc'")); MenuItem mi2 = new MenuItem("O nas"); mi2.setOnAction( e -> System.out.println("Kliknąłeś przycisk 'O nas'")); MenuItem mi3 = new MenuItem("Kontakt"); mi3.setOnAction( e -> System.out.println("Kliknąłeś przycisk 'Kontakt'")); cm.getItems().addAll(mi1, mi2, mi3); Group root = new Group(); Canvas canvas = new Canvas(200, 200); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setFill(Color.BLUE); gc.setGlobalAlpha(0.7); gc.fillRect(50, 50, 100, 100); canvas.setOnContextMenuRequested(e -> cm.show(canvas, Side.RIGHT, 0,0)); cm.setOnShown(event -> canvas.setOnMouseClicked(e1 -> cm.hide())); cm.setOnHidden(event -> canvas.setOnMouseClicked(null)); root.getChildren().add(canvas); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); } catch (Exception e) { e.printStackTrace(); } } }
Po uruchomieniu klasy, gdy klikniemy prawym klawiszem myszy w obrębie elemntu canvas zonbaczymy menu kontekstowe ContextMmenu
(Rys. 1)
Menu zniknie po wybraniu jednej z opcji menu albo kliknięciu myszą gdziekolwiek.