Pergunta

Alguém sabe de código existente que permite desenhar texto plenamente justificado em Java2D?

Por exemplo, se eu disse, drawString("sample text here", x, y, width), existe uma biblioteca existente que poderia descobrir o quanto de que se encaixa texto dentro da largura, fazer alguma inter-espaçamento entre caracteres para tornar o texto olhar bem, e automaticamente fazer embrulho de texto básico ?

Foi útil?

Solução

Apesar de não ser a solução mais elegante, nem robusto, aqui está um método que levará o Font da corrente objeto Graphics e obter a sua FontMetrics , a fim de descobrir onde para desenhar o texto e, se necessário, mover para uma nova linha:

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;
    }
}

Esta aplicação irá separar o String dada em uma matriz de String usando o split método com um caractere de espaço como o único separador de palavra, por isso é provavelmente não muito robusto. Ele também pressupõe que a palavra é seguido por um caractere de espaço e age de acordo quando se deslocam a posição curX.

Eu não recomendo usar esta implementação se eu fosse você, mas provavelmente as funções que são necessárias para fazer uma outra aplicação ainda usar os métodos fornecidos pelo classe FontMetrics .

Outras dicas

Para quebra de linha, você poderia estar interessado pelo título Como mostrar uma string em várias linhas usando gráficos . Sem justificação aqui, não tenho certeza se é fácil (ou impossível!) Para adicionar ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top