首页 > 解决方案 > 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

我知道如何获取字符串的宽度,但我不知道如何拆分它。

标签: javastringgraphicssplitpixel

解决方案


我知道我很晚才说出我是否弄清楚了,但是我设法在没有 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 游戏并且非常用户友好的游戏。它几乎已经为它的第一个版本做好了准备,我很高兴看到它可以做什么!


推荐阅读