Displaying String/Label in JavaFX

后端 未结 2 1333
感情败类
感情败类 2021-01-28 17:33

I need help figouring out simply how to display a text in my program so that it can display \"Stop\" in the middle of my polygon shape I\'ve created. What I\'m trying to do is c

相关标签:
2条回答
  • 2021-01-28 17:42

    Replace the Pane with StackPane and add sign to it (after the polygon):

    public void start(Stage primaryStage) {
        StackPane pane = new StackPane();
        Polygon polygon = new Polygon();
        polygon.setFill(javafx.scene.paint.Color.RED); //sets the color of polygon
        ObservableList<Double> list = polygon.getPoints();
    
        //create a label to display in the middle of the "stop sign" polygon shape
        //This is what I need most help on
        Label sign = new Label("STOP");
        //sign.setStyle("-fx-text-fill: white; -fx-font-size: 3em");
        sign.setAlignment(Pos.CENTER);
        System.out.print(sign);
    
    
        pane.getChildren().add(polygon);
        pane.getChildren().add(sign);
    
        final double WIDTH = 200, HEIGHT = 200;
        double centerX = WIDTH / 2, centerY = HEIGHT / 2;
        double radius = Math.min(WIDTH, HEIGHT) * 0.4;
    
        // Add points to the polygon list
        for (int i = 0; i < 6; i++) {
            list.add(centerX + radius * Math.cos(2 * i * Math.PI / 6));
            list.add(centerY - radius * Math.sin(2 * i * Math.PI / 6));
        }
    
        // Create a scene and place it in the stage
        Scene scene = new Scene(pane, WIDTH, HEIGHT);
        primaryStage.setTitle("ShowPolygon"); //Set the stage title
        primaryStage.setScene(scene); //Place the scene in the stage
        primaryStage.show(); //Display the stage
    
    
    }
    

    Javadoc about the StackPane:

    StackPane lays out its children in a back-to-front stack. The z-order of the children is defined by the order of the children list with the 0th child being the bottom and last child on top. If a border and/or padding have been set, the children will be layed out within those insets.

    The stackpane will attempt to resize each child to fill its content area. If the child could not be sized to fill the stackpane (either because it was not resizable or its max size prevented it) then it will be aligned within the area using the alignment property, which defaults to Pos.CENTER.

    0 讨论(0)
  • 2021-01-28 17:52

    Just change new Pane() to new StackPane() and add your label to the pane's child list like you do your Polygon.

    StackPane is a layout manager that allows you to layer items on top of each other (by default centering the layered items).

    0 讨论(0)
提交回复
热议问题