Java: Drawing multiline strings with Graphics

The Graphics.drawString method does not handle newline characters.

You'll have to split the string on newline characters yourself, and draw the lines one by one with a appropriate vertical offset:

void drawString(Graphics g, String text, int x, int y) {
    int lineHeight = g.getFontMetrics().getHeight();
    for (String line : text.split("\n"))
        g.drawString(line, x, y += lineHeight);
}

A Complete Example

This screen shot is produced with the code below:

Screenshot illustrating multiline strings.

import javax.swing.*;
import java.awt.*;

class TestComponent extends JPanel {

    private void drawString(Graphics g, String text, int x, int y) {
        int lineHeight = g.getFontMetrics().getHeight();
        for (String line : text.split("\n"))
            g.drawString(line, x, y += lineHeight);
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        drawString(g, "hello\nworld", 20, 20);
        g.setFont(g.getFont().deriveFont(20f));
        drawString(g, "part1\npart2", 120, 120);
    }
    
    public static void main(String s[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new TestComponent());
        f.setSize(220, 220);
        f.setVisible(true);
    }
}

Comments

Be the first to comment!