Java разделить строку определенной длины в пикселях - PullRequest
1 голос
/ 08 апреля 2019

Мне нужно разделить строку, которая будет отображаться в окне, используя java.awt.Graphics. Проблема в том, что мне нужно, чтобы строка автоматически разбивалась, когда она достигает ширины прямоугольников в пикселях. Например,

"This is an example string. What goes into the string does not matter" 
[----------------------------------------] <-- Hypothetical width of box/rect

Мне нужно, чтобы строка была разделена между "идет" и "в", чтобы я мог поместить остальную часть текста в новую строку:

"This is an example string. What goes
into the string does not matter" 
[----------------------------------------] <-- Hypothetical width of box/rect

Я знаю, как получить ширину строки, но я не знаю, как ее разделить.

1 Ответ

0 голосов
/ 28 мая 2019

Я знаю, что опоздал заявить, понял ли я это или нет, но мне удалось сделать это самому без стороннего 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-игру, которую хочет пользователь, и она очень удобна для пользователя. Он почти готов к своей первой версии, и я рад видеть, что из этого можно сделать!

...