如何将文本放入圆形对象以使其从圆形的中心显示? [英] how to put a text into a circle object to display it from circle's center?

查看:7
本文介绍了如何将文本放入圆形对象以使其从圆形的中心显示?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很好奇,有没有什么方法可以将文本(我通常使用动态变化的数字)放入圆形对象中,或者创建一个文本对象并将其边界设置为圆形的中心是显示它的唯一方法?感谢您的每一条回复:)

推荐答案

将圆形和文本放在StackPane中,并将文本边界类型计算设置为可视化:

Circle circle = new Circle();
Text text = new Text("42");
text.setBoundsType(TextBoundsType.VISUAL); 
StackPane stack = new StackPane();
stack.getChildren().add(circle, text);

您可以使用时间线更改圆圈中的文本值。

这里有一个完整的示例:

import javafx.animation.*;
import javafx.application.Application;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.scene.text.*;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TextInCircle extends Application {
    public static void main(String[] args) throws Exception { launch(args); }

    private static final int R = 150;
    private static final Color lineColor = Color.FIREBRICK.deriveColor(0, 1, 1, .6);

    @Override
    public void start(final Stage stage) throws Exception {
        final Circle circle = createCircle();
        final Text   text   = createText();

        final Line l1 = createLine(lineColor, 0, R - 0.5, 2 * R, R - 0.5);
        final Line l2 = createLine(lineColor, R - 0.5, 0, R - 0.5, 2 * R);

//        Group group = new Group(circle, text, l1 , l2);
        Group group = new Group(circle, l1 , l2);

        StackPane stack = new StackPane();
        stack.getChildren().addAll(group, text);

        stage.setScene(new Scene(stack));
        stage.show();

        animateText(text);
    }

    private Circle createCircle() {
        final Circle circle = new Circle(R);

        circle.setStroke(Color.FORESTGREEN);
        circle.setStrokeWidth(10);
        circle.setStrokeType(StrokeType.INSIDE);
        circle.setFill(Color.AZURE);
        circle.relocate(0, 0);

        return circle;
    }

    private Line createLine(Color lineColor, double x1, double y1, double x2, double y2) {
        Line l1 = new Line(x1, y1, x2, y2);

        l1.setStroke(lineColor);
        l1.setStrokeWidth(1);

        return l1;
    }

    private Text createText() {
        final Text text = new Text("A");

        text.setFont(new Font(30));
        text.setBoundsType(TextBoundsType.VISUAL);
//        centerText(text);

        return text;
    }

    private void centerText(Text text) {
        double W = text.getBoundsInLocal().getWidth();
        double H = text.getBoundsInLocal().getHeight();
        text.relocate(R - W / 2, R - H / 2);
    }

    private void animateText(final Text text) {
        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent actionEvent) {
                char newValue = (char) ((text.getText().toCharArray()[0] + 1) % 123);
                if (newValue == 0) newValue = 'A';
                text.setText("" + newValue);
//                centerText(text);
            }
        }));
        timeline.setCycleCount(1000);
        timeline.play();
    }
}

注释掉的代码还包括手动放置文本的代码(如果您希望这样做而不是使用StackPane)。

这篇关于如何将文本放入圆形对象以使其从圆形的中心显示?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆