import javafx.application.Application; import javafx.application.Platform; import javafx.beans.binding.DoubleBinding; import javafx.beans.property.SimpleDoubleProperty; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; import javafx.scene.shape.LineTo; import javafx.scene.shape.MoveTo; import javafx.scene.shape.Path; import javafx.scene.shape.SVGPathBuilder; import javafx.scene.text.TextBuilder; import javafx.stage.Stage; public class RoundButtonExample extends Application { public static void main(String[] args) { launch(args); } private DoubleBinding scaleFactor; @Override public void start(Stage primaryStage) { EventHandler<ActionEvent> exitHandler = new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Platform.exit(); } }; HBox layout = new HBox(10); layout.getChildren().addAll( scaleTo(60, closeButton(textCloseIcon(), exitHandler)), scaleTo(90, closeButton(pathCloseIcon(), exitHandler)), scaleTo(120, closeButton(svgPathCloseIcon(), exitHandler))); layout.getStylesheets() .add(this.getClass().getResource("roundbutton.css") .toExternalForm()); primaryStage.setScene(new Scene(layout)); primaryStage.show(); } private Region closeButton(Node closeIcon, EventHandler<ActionEvent> actionHandler) { final double BUTTON_SIZE = 30; StackPane closeButton = new StackPane(); closeButton.getStyleClass().add("closebutton"); Button button = new Button(); button.setOnAction(actionHandler); closeIcon.setMouseTransparent(true); closeButton.getChildren().addAll(button, closeIcon); button.setMinSize(BUTTON_SIZE, BUTTON_SIZE); closeButton.setPrefSize(BUTTON_SIZE, BUTTON_SIZE); closeButton .setMaxSize(StackPane.USE_PREF_SIZE, StackPane.USE_PREF_SIZE); return closeButton; } private Node textCloseIcon() { return TextBuilder.create().text("X").styleClass("closetext").build(); } private Node pathCloseIcon() { Path path = new Path(); path.getElements().addAll(new MoveTo(9, 9), new LineTo(21, 21), new MoveTo(9, 21), new LineTo(21, 9)); path.getStyleClass().add("closeicon"); return path; } private Node svgPathCloseIcon() { return SVGPathBuilder.create().content("M9 9 L21 21 M9 21 L21 9") .styleClass("closeicon").build(); } private Group scaleTo(double size, Region n) { Group g = new Group(n); scaleFactor = (new SimpleDoubleProperty(size)) .divide(n.widthProperty()); n.scaleXProperty().bind(scaleFactor); n.scaleYProperty().bind(scaleFactor); return g; } }