Search code examples
javacssjavafxfxml

JavaFx : Is it possible to align the Box above the Text content in a checkbox?


I want to achieve somthing like this :

enter image description here


Solution

  • Below is one simple example of achieving what you want. The more professional way would be to implement a custom skin. Maybe someone else will share it.

    App:

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.CheckBox;
    import javafx.scene.control.ContentDisplay;
    import javafx.scene.control.Label;
    import javafx.scene.input.MouseButton;
    import javafx.scene.layout.Pane;
    import javafx.scene.text.TextAlignment;
    import javafx.stage.Stage;
    
    
    public class App extends Application {
    
        @Override
        public void start(Stage stage) {
    
            // Create a separated label at first:
            Label label = new Label("Am efectuat toate");
    
            // Create a check box without a text
            CheckBox checkBox = new CheckBox();
    
            // Put the check box as the graphic node of the label:
            label.setGraphic(checkBox);
    
            // Put the box on top of the label:
            label.setContentDisplay(ContentDisplay.TOP);
    
            // Toggle selected property of checkbox on label primary mouse button click:
            label.setOnMouseClicked(mouseEvent -> {
                if (mouseEvent.getButton() == MouseButton.PRIMARY)
                    checkBox.setSelected(!checkBox.isSelected());
            });
    
            // If you want to have the last word "toate" in a second line:
            label.setWrapText(true);
            label.setMaxWidth(80);
            label.setTextAlignment(TextAlignment.CENTER);
    
            // Create scene and show:
            Pane root = new Pane();
            root.getChildren().add(label);
            stage.setScene(new Scene(root, 120, 60));
            stage.show();
        }
        
    
        public static void main(String[] args) {
            launch();
        }
    }
    

    Preview:

    preview