java Graphics2D drawString()内容换行问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Graphics2D drawString()内容换行问题相关的知识,希望对你有一定的参考价值。

String a="阿萨德啊啊aaa啊1238372jhhg";
Graphics2D g;
g.drawString(a,10,20);
怎么让a的内容达到自动换行的效果,要是截取的话里面数字和字母又不等宽了,求大神啊

参考技术A g.getFontMetrics().charsWidth(data, off, len);把字符串toCharArray()换成char数组,放到方法里获取长度追问

g.getFontMetrics().charsWidth(data, off, len);这个方法得到长度之后我该怎么弄呢?哥

追答

对比下一控件的宽度,太长的就把字符串截断咯,

使用 Java Swing 的 ASCII 终端模拟 [关闭]

【中文标题】使用 Java Swing 的 ASCII 终端模拟 [关闭]【英文标题】:ASCII terminal simulation using Java Swing [closed] 【发布时间】:2021-11-30 13:29:24 【问题描述】:

我正在尝试为典型的基于 ASCII 的终端创建基于 Java Swing 的模拟。我将终端屏幕的内容作为二维数组,其中每个元素都有一个字符加上前景色和背景色。

最初的(天真的)策略是使用JPanel 并使用其paintComponent(...) 方法在特定坐标处使用drawString(...) 方法从数组中简单地绘制每个单独的字符(使用适当的前景和背景颜色处理以及必要的字体度量算法)。

它运行良好 - 但令人痛苦,速度慢得无法使用(尤其是当我最大化窗口大小时)。

我是否遗漏了一些明显的设计明智的东西?

【问题讨论】:

很难说没有minimal reproducible example 作为您问题的一部分,但我的猜测是您用Thread.sleep 或一些长期运行的进程阻止了Event Dispatch Thread。 【参考方案1】:

如果您怀疑代码中存在性能问题,您可能需要查看 Java Swing 的内置 JEditorPane。它可以处理具有各种文本格式的长文档,甚至可以嵌入图像等其他对象。

https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/JEditorPane.html

【讨论】:

以上是关于java Graphics2D drawString()内容换行问题的主要内容,如果未能解决你的问题,请参考以下文章

Java 上的 (Graphics g, Graphics2D) 问题

Java中的Graphics2D类基本使用教程

如何在 java 中的 Graphics2D 对象上创建事件

java Graphics2D 生成图片随着字符长度变化

java使用Graphics2D图片叠加

Java2D / Graphics2D 性能