java - Java以像素为单位分割字符串
问题描述
我需要使用 java.awt.Graphics 拆分将要显示在框中的字符串。问题是,当字符串达到以像素为单位的矩形宽度时,我需要自动拆分字符串。例如,
"This is an example string. What goes into the string does not matter"
[----------------------------------------] <-- Hypothetical width of box/rect
我需要将字符串在“goes”和“into”之间拆分,这样我就可以将其余文本放在新行上:
"This is an example string. What goes
into the string does not matter"
[----------------------------------------] <-- Hypothetical width of box/rect
我知道如何获取字符串的宽度,但我不知道如何拆分它。
解决方案
我知道我很晚才说出我是否弄清楚了,但是我设法在没有 3rd 方 API 的情况下自己做到了。如果字符串长度太长,最后一个单词被截断,它的效率不是很高。(如果您愿意,您可以查看代码,但我无法再解释它是如何工作的,因为我已经很长时间没有查看它了。
public class ConsoleLog {
private static Color c = Color.WHITE;
public static Color getC() {
return c;
}
public static void setC(Color c) {
ConsoleLog.c = c;
}
private static int pos;
private static List<String[]> logs;
private static List<Point>linesPos = new ArrayList<Point>();
private static Rectangle r = Main.Main.screenSize;
public static void log(List <String[]> logs, Graphics g) {
g.setColor(c);
ConsoleLog.logs = logs;
splitConsole(g);
}
public static void splitConsole(Graphics g){
pos = 0;
for(int i = 0; i < (r.height / 2) / 10 - 10; i++) {
linesPos.add(new Point(10, (i * (r.height / (50 + 3) + 5) + 15)));
}
for(int i = 0; i < logs.size(); i++) {
for(int ie = 0; ie < logs.get(i).length || pos < logs.get(i).length; ie++) {
g.drawString(logs.get(i)[ie], linesPos.get(pos).x, linesPos.get(pos).y);
pos++;
}
}
}
需要明确的是,我当时正在开发一个小型游戏引擎,并决定放弃它,因为它变得过于混乱、效率低下,并且是围绕点击游戏构建的。我正在开发第二个能够创建用户想要的任何 2D 游戏并且非常用户友好的游戏。它几乎已经为它的第一个版本做好了准备,我很高兴看到它可以做什么!
推荐阅读
- python - 如何在 python 的文件夹结构中找到文件并复制文件所在的整个文件夹?
- python - Pandas - 错误:只能比较相同标签的系列对象
- python - dask map_partitions(pd.cut, bins) 实际上会在整个数据帧上运行吗?
- javascript - 如何从数据库中显示html标签
- listview - setOnItemClickListener 未在 ListView Android 中激活
- excel - 循环用于函数的不同输入,然后在某个值处停止
- ansible - Ansible:调用按属性过滤的其他主机值
- c++ - C++ 中的客户端服务器传感器数据收集和 ROS
- javascript - 使用 Discord 机器人移动语音聊天用户
- php - 如何从单独的、导入的 services.yaml 中装饰服务?