package examples; import javafx.application.Application; import javafx.event.Event; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.TextArea; import javafx.scene.control.ToolBar; import javafx.scene.image.Image; import javafx.scene.input.KeyCombination; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import javafx.scene.shape.SVGPath; import javafx.stage.Stage; import javafx.stage.Window; import javafx.stage.WindowEvent; import syntheticafx.base.Action; import syntheticafx.base.ActionBase; import syntheticafx.base.FXUtilities; import syntheticafx.base.RootPane; import syntheticafx.base.SyntheticaFX; public class ActionDemo extends Application { private Window stage; private Action newFileAction; private Action closeAction; public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { SyntheticaFX.init("syntheticafx.theme.modena.SyntheticaFXModena"); this.stage = stage; stage.setScene(new Scene(new RootPane(stage, createContent()), 400, 300)); stage.setTitle(getClass().getSimpleName()); //String url = getClass().getResource(iconLocation).toExternalForm(); //stage.getIcons().add(new Image(url)); stage.show(); } private Parent createContent() { createActions(); BorderPane content = new BorderPane(); content.setTop(createTopPane()); content.setCenter(new TextArea()); return content; } private void createActions() { newFileAction = new ActionBase("New File..."); newFileAction.setImage(createImage()); newFileAction.setAccelerator(KeyCombination.keyCombination("Shift+Ctrl+N")); newFileAction.setHandler(e -> System.out.println("--- Action: " + e)); closeAction = new ActionBase("Close"); closeAction.setAccelerator(KeyCombination.keyCombination("Ctrl+X")); closeAction.setHandler(e -> Event.fireEvent(stage, new WindowEvent(stage, WindowEvent.WINDOW_CLOSE_REQUEST))); } private Node createTopPane() { VBox vbox = new VBox(); vbox.getChildren().add(createMenuBar()); vbox.getChildren().add(createToolBar()); return vbox; } private MenuBar createMenuBar() { MenuBar mb = new MenuBar(); mb.getMenus().add(createFileMenu()); return mb; } private Menu createFileMenu() { MenuItem newFileMenuItem = new MenuItem("New"); newFileAction.bindMenuItem(newFileMenuItem, 12, 16); Menu file = new Menu("_File"); file.getItems().add(newFileMenuItem); file.getItems().add(new SeparatorMenuItem()); MenuItem closeMenuItem = new MenuItem(); file.getItems().add(closeMenuItem); closeAction.bindMenuItem(closeMenuItem); return file; } private ToolBar createToolBar() { Button newFileButton = new Button("Action Button"); // -1 means use original icon size newFileAction.bindButton(newFileButton, -1, -1, false); ToolBar tb = new ToolBar(); tb.getItems().add(newFileButton); return tb; } private Image createImage() { SVGPath path = new SVGPath(); path.setContent("M421.985,229.833L217.847,25.981c-7.235-7.238-16.94-13.374-29.121-18.416C176.541,2.522,165.407,0,155.318,0H36.547 C26.648,0,18.083,3.619,10.85,10.848C3.617,18.081,0.002,26.646,0.002,36.545v118.771c0,10.088,2.519,21.219,7.564,33.404 s11.182,21.792,18.417,28.837L230.118,421.98c7.043,7.043,15.602,10.564,25.697,10.564c9.89,0,18.558-3.521,25.98-10.564 l140.186-140.47c7.043-7.046,10.561-15.604,10.561-25.693C432.542,245.919,429.024,237.258,421.985,229.833z M117.202,117.201 c-7.142,7.138-15.752,10.709-25.841,10.709c-10.085,0-18.699-3.571-25.837-10.709c-7.138-7.139-10.706-15.749-10.706-25.837 c0-10.089,3.568-18.702,10.706-25.837c7.139-7.139,15.752-10.71,25.837-10.71c10.089,0,18.702,3.571,25.841,10.71 c7.135,7.135,10.706,15.749,10.706,25.837C127.908,101.452,124.341,110.062,117.202,117.201z"); path.setStyle("-fx-fill: #faa"); path.setScaleX(0.125); path.setScaleY(0.125); Group node = new Group(path); return FXUtilities.nodeAsImage(node, -1, -1); } }