【问题标题】:How to wrap dynamically text in rectangle如何在矩形中动态包装文本
【发布时间】:2023-01-10 09:26:42
【问题描述】:

我想用 Java 将文本写入文本字段控件。然后我想把这个文本放在矩形中。我希望根据文本的大小将此文本的字体调整为矩形。在 C# 中,代码看起来像这样。但我正在用 Java 做这个应用程序。:我希望它动态调整 thext 的字体,以便它可以适合矩形

 string text2 = "Draw text in a rectangle by passing a RectF to the DrawString method.";
 using (Font font2 = new Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Point))
 {
     Rectangle rect2 = new Rectangle(30, 10, 100, 122);

   
      TextFormatFlags flags = TextFormatFlags.WordBreak;
      TextRenderer.DrawText(e.Graphics, text2, font2, rect2, Color.Blue, flags);
      e.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(rect2));
 }

我不知道如何重写它

【问题讨论】:

  • 所有Labeled 控件都有一个wrapText 属性,用于example。如果这对您不起作用,请edit您的问题以包含一个显示您修改后的方法的minimal reproducible example
  • 如果你真的想要字体大小调整以适合某些矩形/边界,在 JavaFX 中没有简单的方法可以做到这一点。不过,这看起来不像是您的 C# 代码正在做的事情;据我所知(我不知道 C# 或您正在使用的 GUI 库)您将字体大小设置为 12。

标签: javafx


【解决方案1】:

文本样式

wrapText 属性或-fx-wrap-text CSS 属性控制控件中的文本是否应自动换行以适应可用空间。

您可以设置 Labeled 的背景(或边框)样式以获得矩形背景。 LabelLabeled 最常用的形式。

或者,您可以通过在 StackPane 中放置 RectangleLabel(或 Text)来设置背景矩形。

您可以使用标准布局容器或大小调整提示(例如prefHeightprefWidth)来设置Labeled 的整体大小。

您可以configure the Labeled via CSS 或代码。

如果需要,可以通过 Labeled 的文本字符串中的 手动添加段落分隔符。

文本可以使用textAlignment 相对于Labeled 中的可用空间对齐。

多行文字

多行文本示例:

该示例使用 wrapText 属性允许在行不适合标签宽度时自动换行。该示例还显示换行的段落(使用 )。

盒装文字

此代码更新示例以使用 CSS 向文本添加 multi-layered bordered background

  • 调整结果窗口的大小以查看对多行文本的影响。
  • 尝试将 wrapText 设置为 truefalse 以查看两种设置之间的行为差​​异。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.io.IOException;

public class TextApp extends Application {   
    @Override
    public void start(Stage stage) throws IOException {
        Label label = new Label(TEXT);
        label.setWrapText(true);
        label.getStyleClass().add("boxed-text");

        StackPane layout = new StackPane(label);
        layout.setPadding(new Insets(20));

        Scene scene = new Scene(layout);
        scene.getStylesheets().add(CSS);

        stage.setScene(scene);
        stage.show();
    }

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

    private static final String CSS_DATA_TYPE = "data:text/css,";

    private static final String CSS = CSS_DATA_TYPE + // language=CSS
            """
            .root {
                -fx-background-color: azure;
            }
            .boxed-text {
                -fx-background-color: khaki, cornsilk;
                -fx-background-insets: 0, 5;
                -fx-padding: 10;
                -fx-background-radius: 8 8 8 8, 6 6 6 6;
                -fx-font-size: 14px;
            }
            """;

    private static final String TEXT = """
            What a piece of work is a man! how noble in reason!
            how infinite in faculty! in form and moving how
            express and admirable! in action how like an angel!
            in apprehension how like a god! the beauty of the
            world! the paragon of animals! And yet, to me,
            what is this quintessence of dust?
            """;
}

您还在问题中注意到:

我希望根据文本的大小将此文本的字体调整为矩形

我在这里不这样做。在这个问题中已经有足够的处理文本的换行和装箱而不添加动态调整大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多