Domanda

Qualcuno conosce il codice esistente che ti consente di disegnare testo pienamente giustificato in Java2D?

Ad esempio, se dicessi, drawString (" testo di esempio qui " ;, x, y, larghezza) , esiste una libreria esistente che potrebbe capire quanto di quel testo si adatta al larghezza, fai un po 'di spaziatura tra i caratteri per far apparire bene il testo e automaticamente avvolgere le parole di base?

È stato utile?

Soluzione

Sebbene non sia la soluzione più elegante né robusta, ecco un metodo che prenderà Font dell'attuale Graphics e ottiene il suo oggetto FontMetrics per scoprire dove disegnare il testo e, se necessario, passare a una nuova riga:

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

Questa implementazione separerà il String in una matrice di String usando split con un carattere spaziale come unico separatore di parole , quindi probabilmente non è molto robusto. Presuppone inoltre che la parola sia seguita da un carattere spazio e agisca di conseguenza quando si sposta la posizione curX .

Non consiglierei di utilizzare questa implementazione se fossi in te, ma probabilmente le funzioni necessarie per effettuare un'altra implementazione utilizzerebbero comunque i metodi forniti da FontMetrics class .

Altri suggerimenti

Per la parola a capo, potresti essere interessato dal titolo Come produrre una stringa su più linee usando Grafica . Nessuna giustificazione qui, non sono sicuro se sia facile (o impossibile!) Aggiungere ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top