/** * File for the TextFieldWithContextMenu. */ package de.fhswf.in.inf.java2.aufgabe04; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.TextField; import javafx.scene.input.Clipboard; /** * A TextField with a ContextMenu. * * @author Stefan Suhren * @version 1.0 */ public class TextFieldWithContextMenu extends TextField { private MenuItem undo = new MenuItem("Rückgängig"); private MenuItem cut = new MenuItem("Ausschneiden"); private MenuItem copy = new MenuItem("Kopieren"); private MenuItem paste = new MenuItem("Einfügen"); private MenuItem delete = new MenuItem("Löschen"); private MenuItem selectAll = new MenuItem("Alles Markieren"); private ContextMenu contextMenu; /** * Build the ContextMenu for the TextField. * */ public TextFieldWithContextMenu() { undo.setOnAction(e -> { undo(); }); cut.setOnAction(e -> { cut(); }); copy.setOnAction(e -> { copy(); }); paste.setOnAction(e -> { paste(); }); delete.setOnAction(e -> { replaceSelection(""); }); selectAll.setOnAction(e -> { selectAll(); }); contextMenu = new ContextMenu(undo, cut, copy, paste, delete, selectAll); setContextMenu(contextMenu); contextMenu.setOnShowing(e -> { getContextMenu().getItems().forEach(f -> { f.setDisable(true); }); undo.setDisable(!isUndoable()); paste.setDisable(Clipboard.getSystemClipboard().getString() == null); selectAll.setDisable(getLength() <= 0 || getSelection().getLength() >= getLength()); if (getSelection().getLength() > 0) { copy.setDisable(false); cut.setDisable(false); delete.setDisable(false); } }); } }