You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML格式印地语文本出现意外换行的技术问题求助

解决Swing中印地语文本意外换行的问题

我之前也碰到过类似的天城文(印地语使用的文字)在Swing组件里意外换行的问题,核心原因是Swing的默认换行算法对印度语这类复杂书写系统的支持不足——天城文依赖音节组合、字符连写的规则,默认按单个字符截断的逻辑会把完整的音节拆开,视觉上就变成了“意外换行”。下面是几种可行的解决方案:

方案1:改用对复杂脚本更友好的JTextPane组件

JTextPane比普通的JLabel/JTextField更能识别天城文的音节边界,避免错误截断。搭配支持印地语的字体使用效果更好:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.StyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;

public class UndesiredLineBreak extends JFrame {
    public static final long serialVersionUID = 1L;

    public UndesiredLineBreak() {
        setSize(800, 230);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new BorderLayout()); // 补全你未完成的布局设置

        // 初始化JTextPane
        JTextPane textPane = new JTextPane();
        textPane.setEditable(false);
        textPane.setOpaque(false);

        // 设置印地语文本与样式
        String hindiText = "यह एक लंबा हिंदी पाठ है जो स्विंग में अनावश्यक रूप से लाइन ब्रेक हो रहा है";
        StyledDocument doc = textPane.getStyledDocument();
        SimpleAttributeSet style = new SimpleAttributeSet();
        StyleConstants.setFontSize(style, 16);
        StyleConstants.setFontFamily(style, "Arial Unicode MS"); // 选择支持印地语的字体
        try {
            doc.insertString(doc.getLength(), hindiText, style);
        } catch (Exception e) {
            e.printStackTrace();
        }

        add(new JScrollPane(textPane), BorderLayout.CENTER);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(UndesiredLineBreak::new);
    }
}

方案2:给JLabel开启按单词/音节换行

如果坚持使用JLabel,可以开启WrapStyleWord属性,让组件按单词(而非单个字符)截断,同时搭配支持印地语的字体:

JLabel hindiLabel = new JLabel("यह एक लंबा हिंदी पाठ है जो स्विंग में अनावश्यक रूप से लाइन ब्रेक हो रहा है");
hindiLabel.setFont(new Font("Arial Unicode MS", Font.PLAIN, 16));
hindiLabel.setLineWrap(true);
hindiLabel.setWrapStyleWord(true); // 关键:按单词/音节边界换行
add(hindiLabel, BorderLayout.CENTER);

方案3:确保使用支持天城文的字体

很多默认字体(比如宋体、Times New Roman)对天城文的字符组合支持不全,会间接导致换行异常。推荐使用Arial Unicode MS、Noto Sans Devanagari这类专门适配复杂书写系统的字体。

内容的提问来源于stack exchange,提问作者Jörg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:48:21