使用图形对图像进行文本换行?

时间:2017-03-29 06:18:41

标签: java swing graphics awt graphics2d

如何根据文字大小包装文字

g.drawString("Hello, please help me in wrapping the text", 100, 100);

输出 - 直线文字:

https://i.stack.imgur.com/oUcMd.jpg

必需输出 - 基于文本长度的包装文本:

https://i.stack.imgur.com/MldhL.jpg

如何实现所需的输出?在计算它时浪费了很多时间,但没有用,并且非常感谢解释。

1 个答案:

答案 0 :(得分:2)

使用HTML包装单词是解决此问题的最简单方法。

enter image description here

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

public class LabelRenderTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                String title = "<html><body style='"
                        + "text-align: center; width: 100px; padding: 5px;'>"
                        + "<p>Hello, please help me in<br>wrapping the text";

                BufferedImage image = new BufferedImage(
                        200,
                        100,
                        BufferedImage.TYPE_INT_RGB);

                JLabel textLabel = new JLabel(title);
                textLabel.setSize(textLabel.getPreferredSize());
                textLabel.setForeground(Color.WHITE);

                Graphics2D g = image.createGraphics();
                textLabel.paint(g);
                g.dispose();

                JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(image)));
            }
        });
    }
}