Graphics2D.drawString中的换行符出现问题

g2Graphics2D类的一个实例。 我希望能够绘制多行文本,但需要换行符。 以下代码在一行中呈现。

 String newline = System.getProperty("line.separator"); g2.drawString("part1\r\n" + newline + "part2", x, y); 

drawString方法不处理换行符。

您必须自行将string拆分为新行字符,并使用适当的垂直偏移量逐一绘制行:

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

这是一个完整的例子给你的想法:

 import java.awt.*; public class TestComponent extends JPanel { private void drawString(Graphics g, String text, int x, int y) { for (String line : text.split("\n")) g.drawString(line, x, y += g.getFontMetrics().getHeight()); } 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); } } 

这给出了以下结果:

在这里输入图像说明

我只是提供了一种方法,通过给出线宽来自动绘制长文本分割。

 public static void drawStringMultiLine(Graphics2D g, String text, int lineWidth, int x, int y) { FontMetrics m = g.getFontMetrics(); if(m.stringWidth(text) < lineWidth) { g.drawString(text, x, y); } else { String[] words = text.split(" "); String currentLine = words[0]; for(int i = 1; i < words.length; i++) { if(m.stringWidth(currentLine+words[i]) < lineWidth) { currentLine += " "+words[i]; } else { g.drawString(currentLine, x, y); y += m.getHeight(); currentLine = words[i]; } } if(currentLine.trim().length() > 0) { g.drawString(currentLine, x, y); } } }