Phương thức drawString
không xử lý dòng mới.
Bạn sẽ phải chia chuỗi trên nhân vật mới-line bản thân và vẽ các đường từng người một với một dọc đúng offset:
void drawString(Graphics g, String text, int x, int y) {
for (String line : text.split("\n"))
g.drawString(line, x, y += g.getFontMetrics().getHeight());
}
Đây là một ví dụ hoàn chỉnh để cung cấp cho bạn ý tưởng:
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);
}
}
mang đến cho các kết quả sau:
+1 - câu trả lời đầy đủ –
Vẽ tùy chỉnh được thực hiện bằng cách ghi đè phương thức paintComponent() và trước tiên bạn nên gọi super.paintComponent (g). – camickr
Điểm tốt. Đã cập nhật. – aioobe