JavaFX实现简单应用-画图

783 阅读2分钟
package com.example.io.home2;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.List;

public class Draw extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Shapes");
        Group root = new Group();
        Scene scene = new Scene(root, 300, 300, Color.WHITE);
        root.getChildren().add(this.head());
        root.getChildren().add(eyes(90));
        root.getChildren().add(eyes(105));
        root.getChildren().add(clothes(10.0f, 80, true));
        root.getChildren().add(clothes(60.0f, 110, false));
        root.getChildren().add(clothesMiddle());
        root.getChildren().add(clothesBottom());
        root.getChildren().add(leg(10.0f, 90, true));
        root.getChildren().add(leg(10.0f, 105, false));
        root.getChildren().add(foot(10.0f, 87, true));
        root.getChildren().add(foot(10.0f, 108, false));
        root.getChildren().addAll(blackboard());
        root.getChildren().addAll(rightHand());
        root.getChildren().addAll(leftHand());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Ellipse head() {
        Ellipse headEllipse = new Ellipse();
        headEllipse.setCenterX(100);
        headEllipse.setCenterY(50);
        headEllipse.setRadiusX(30);
        headEllipse.setRadiusY(50/2);
        headEllipse.setStrokeWidth(2);
        headEllipse.setStroke(Color.BLACK);
        headEllipse.setFill(Color.WHITE);
        return headEllipse;
    }

    private HBox eyes(Integer left) {
        Path path = new Path();
        path.getElements().add(new MoveTo(0.0f, 0.0f));
        path.getElements().add(new LineTo(0.0f, 8.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(40, 50, 10, left));
        return root;
    }

    private HBox clothes(double moveX, int left, Boolean leftFlag) {
        Path path = new Path();
        path.getElements().add(new MoveTo(moveX, 0.0f));
        path.getElements().add(new LineTo(leftFlag ? moveX - 5.0f : moveX + 5.0f, 30.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(73, 50, 10, left));
        return root;
    }

    private HBox clothesMiddle() {
        Path path = new Path();
        path.getElements().add(new MoveTo(0.0f, 0.0f));
        path.getElements().add(new LineTo(0.0f, 22.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(73.5, 50, 10, 100));
        return root;
    }

    private HBox clothesBottom() {
        Path path = new Path();
        path.getElements().add(new MoveTo(0.0f, 0.0f));
        path.getElements().add(new LineTo(36.0f, 0.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(103, 50, 10, 80));
        return root;
    }

    private HBox leg(double moveX, int left, boolean leftFlag) {
        Path path = new Path();
        path.getElements().add(new MoveTo(moveX, 0.0f));
        path.getElements().add(new LineTo(leftFlag ? moveX - 3.0 : moveX + 3.0, 22.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(103, 50, 10, left));
        return root;
    }

    private HBox foot(double moveX, int left, boolean leftFlag) {
        Path path = new Path();
        path.getElements().add(new MoveTo(moveX, 0.0f));
        path.getElements().add(new LineTo(leftFlag ? moveX - 3.0 : moveX + 3.0, 1.0f));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(path);
        vbox.setSpacing(5);

        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.setSpacing(40);
        root.setPadding(new Insets(125, 50, 10, left));
        return root;
    }

    private List<Line> blackboard() {
        Line left = new Line();
        left.setStartX(130.0f);
        left.setStartY(10.0f);
        left.setEndX(130.0f);
        left.setEndY(90.0f);
        Line top = new Line();
        top.setStartX(130.0f);
        top.setStartY(10.0f);
        top.setEndX(210.0f);
        top.setEndY(10.0f);
        Line bottom = new Line();
        bottom.setStartX(130.0f);
        bottom.setStartY(90.0f);
        bottom.setEndX(210.0f);
        bottom.setEndY(90.0f);
        Line right = new Line();
        right.setStartX(210.0f);
        right.setStartY(10.0f);
        right.setEndX(210.0f);
        right.setEndY(90.0f);
        List<Line> result = new ArrayList<>();
        result.add(left);
        result.add(top);
        result.add(bottom);
        result.add(right);
        return result;
    }

    private List<Line> rightHand() {
        Line left = new Line();
        left.setStartX(110.0f);
        left.setStartY(75.0f);
        left.setEndX(130.0f);
        left.setEndY(75.0f);
        Line right = new Line();
        right.setStartX(130.0f);
        right.setStartY(75.0f);
        right.setEndX(140.0f);
        right.setEndY(70.0f);
        Line stick = new Line();
        stick.setStartX(140.0f);
        stick.setStartY(50.0f);
        stick.setEndX(140.0f);
        stick.setEndY(78.0f);
        List<Line> result = new ArrayList<>();
        result.add(left);
        result.add(right);
        result.add(stick);
        return result;
    }

    private List<Line> leftHand() {
        Line first = new Line();
        first.setStartX(85.0f);
        first.setStartY(73.0f);
        first.setEndX(80.0f);
        first.setEndY(85.0f);
        Line second = new Line();
        second.setStartX(80.0f);
        second.setStartY(85.0f);
        second.setEndX(70.0f);
        second.setEndY(90.0f);
        List<Line> result = new ArrayList<>();
        result.add(first);
        result.add(second);

        result.addAll(leftRectangle());
        return result;
    }

    private List<Line> leftRectangle() {
        Line first = new Line();
        first.setStartX(62.9f);
        first.setStartY(82.9f);
        first.setEndX(77.1f);
        first.setEndY(97.1f);

        Line second = new Line();
        second.setStartX(77.1f);
        second.setStartY(97.1f);
        second.setEndX(62.9f);
        second.setEndY(111.3f);

        Line third = new Line();
        third.setStartX(62.9f);
        third.setStartY(111.3f);
        third.setEndX(48.7f);
        third.setEndY(97.1f);

        Line fourth = new Line();
        fourth.setStartX(48.7f);
        fourth.setStartY(97.1f);
        fourth.setEndX(62.9f);
        fourth.setEndY(82.9f);
        List<Line> result = new ArrayList<>();
        result.add(first);
        result.add(second);
        result.add(third);
        result.add(fourth);
        result.addAll(threeSegment());
        return result;
    }

    private List<Line> threeSegment() {
        Line first = new Line();
        first.setStartX(55);
        first.setStartY(95.1f);
        first.setEndX(64.5f);
        first.setEndY(104.6f);

        Line second = new Line();
        second.setStartX(63.1f);
        second.setStartY(97.1f);
        second.setEndX(65.9f);
        second.setEndY(100.3f);

        Line third = new Line();
        third.setStartX(61.9f);
        third.setStartY(89.3f);
        third.setEndX(70.7f);
        third.setEndY(98.1f);
        List<Line> result = new ArrayList<>();
        result.add(first);
        result.add(second);
        result.add(third);
        return result;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

image.png