Полное обоснование с заменой Java Graphics.drawString?

StackOverflow https://stackoverflow.com/questions/400566

  •  03-07-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает существующий код, который позволяет рисовать полностью выровненный текст в Java2D?

Например, если бы я сказал: drawString("sample text here", x, y, width), существует ли существующая библиотека, которая могла бы определить, какая часть этого текста умещается в пределах ширины, сделать некоторое расстояние между символами, чтобы текст выглядел хорошо, и автоматически выполнить базовый перенос слов?

Это было полезно?

Решение

Хотя это и не самое элегантное и надежное решение, вот метод, который позволит Font нынешнего Graphics объект и получить его FontMetrics чтобы узнать, где рисовать текст и при необходимости перейти на новую строку:

public void drawString(Graphics g, String s, int x, int y, int width)
{
    // FontMetrics gives us information about the width,
    // height, etc. of the current Graphics object's Font.
    FontMetrics fm = g.getFontMetrics();

    int lineHeight = fm.getHeight();

    int curX = x;
    int curY = y;

    String[] words = s.split(" ");

    for (String word : words)
    {
        // Find out thw width of the word.
        int wordWidth = fm.stringWidth(word + " ");

        // If text exceeds the width, then move to next line.
        if (curX + wordWidth >= x + width)
        {
            curY += lineHeight;
            curX = x;
        }

        g.drawString(word, curX, curY);

        // Move over to the right for next word.
        curX += wordWidth;
    }
}

Эта реализация будет отделять заданные String в массив String с помощью split метод с пробелом в качестве единственного разделителя слов, поэтому он, вероятно, не очень надежен.Он также предполагает, что за словом следует пробел, и действует соответствующим образом при перемещении курсора. curX позиция.

На вашем месте я бы не рекомендовал использовать эту реализацию, но, вероятно, функции, необходимые для создания другой реализации, все равно будут использовать методы, предоставляемые FontMetrics сорт.

Другие советы

Для переноса слов вас может заинтересовать Как вывести строку в несколько строк с помощью графики.Здесь нет оправданий, не уверен, легко (или невозможно!) Добавить...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top