Java 画樱花树 代码
时间: 2024-10-11 17:05:59 浏览: 14
在Java中,如果你想画一个静态的樱花树,可以使用JavaFX而不是传统的Swing或者Canvas,因为它提供了更丰富的图形绘制功能。以下是一个简单的JavaFX代码示例,展示如何使用Scene、Rectangle、Path和Group等元素来构建一棵樱花树:
```java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.StrokeType;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;
public class SakuraTree extends Application {
private static final int TREE_WIDTH = 500;
private static final int TREE_HEIGHT = 600;
private static final int BRANCH_LENGTH = 100;
private static final int BRANCH_ANGLE = 45;
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(TREE_WIDTH, TREE_HEIGHT);
Scene scene = new Scene(canvas);
// 主体树木
Shape trunk = createTrunk(canvas.getWidth(), canvas.getHeight());
// 分支
Group branches = createBranches(trunk.getBoundsInParent(), canvas.getWidth(), canvas.getHeight());
StackPane root = new StackPane(trunk, branches);
primaryStage.setScene(scene);
primaryStage.show();
}
private Shape createTrunk(int width, int height) {
Rectangle trunk = new Rectangle(width / 4, height / 4);
trunk.setFill(Color.BROWN);
return trunk;
}
private Group createBranches(Rectangle trunkRect, int width, int height) {
Group branchGroup = new Group();
for (int i = 0; i < 4; i++) {
double angle = Math.toRadians(BRANCH_ANGLE);
double branchLength = trunkRect.getWidth() * BRANCH_LENGTH / trunkRect.getHeight();
double startX = trunkRect.getMinX() + trunkRect.getWidth() / 2;
double startY = trunkRect.getMinY() + trunkRect.getHeight() / 2;
double endX = startX + Math.cos(angle) * branchLength;
double endY = startY + Math.sin(angle) * branchLength;
Shape branch = new Rectangle(endX - trunkRect.getWidth() / 16, endY - trunkRect.getHeight() / 16,
trunkRect.getWidth() / 8, trunkRect.getHeight() / 8);
branch.setStroke(Color.BLACK);
branch.setFill(Color.WHITE);
branch.setStrokeWidth(2);
branch.setStrokeType(StrokeType.SOLID);
branchGroup.getChildren().add(branch);
branchGroup.getChildren().add(createBranches(branch.getBoundsInParent(), width, height));
}
return branchGroup;
}
public static void main(String[] args) {
launch(args);
}
}
```
这段代码会创建一棵有分支的樱花树,树枝从主干上逐渐延伸出去。每个分支再生成新的小枝,形成树的层次感。