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:
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!