Java Arial Unicode MS未在Jtree中对齐

Java Arial Unicode MS未在Jtree中对齐,java,swing,unicode,fonts,jtree,Java,Swing,Unicode,Fonts,Jtree,我正在写一个JTree,其中我正在对齐英语和unicode混合的文本。 我所看到的是,在使用Arial Unicode MS字体(即Unicode和单间距字体)之后,文本没有对齐,因为单间距文本通常是对齐的 我测试过的一种正确对齐的字体是ConsoleAS,但由于它不是Unicode,所以它没有显示不同语言的字符 这里提到了一个示例代码供参考: 我使用过韩语:- package hello; import java.awt.Font; import javax.swing.JFrame; i

我正在写一个JTree,其中我正在对齐英语和unicode混合的文本。 我所看到的是,在使用Arial Unicode MS字体(即Unicode和单间距字体)之后,文本没有对齐,因为单间距文本通常是对齐的

我测试过的一种正确对齐的字体是ConsoleAS,但由于它不是Unicode,所以它没有显示不同语言的字符

这里提到了一个示例代码供参考: 我使用过韩语:-

package hello;

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
public class Jtree_Test extends JFrame
{
    private static final long serialVersionUID = 1L;
    private JTree tree;
    public Jtree_Test()
    {
        //create the root node
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");

        //create the child nodes
        DefaultMutableTreeNode vegetableNode = new DefaultMutableTreeNode("Vegetables                           test1");
        DefaultMutableTreeNode fruitNode = new DefaultMutableTreeNode("test2                                 " + "안녕하세요, 당신은 어떠세요");
        //add the child nodes to the root node
        root.add(vegetableNode);
        root.add(fruitNode);

        //create the tree by passing in the root node
        tree = new JTree(root);
        tree.setFont(new Font("Arial Unicode MS", Font.PLAIN, 12));       
        getContentPane().add(tree);

        this.setSize(557, 349);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("JTree Example");       
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Jtree_Test();
            }
        });
    }       
}

JTree中的文本对齐错误,因为Arial Unicode MS字体不是等距字体

见: 关于单间距,没有什么可说的。微软可能只是指微软

只需使用Java中始终存在的单间距逻辑字体, 至少在我的窗户上是可以的:

    //create the root node
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");

    //create the child nodes
    DefaultMutableTreeNode vegetableNode = new DefaultMutableTreeNode(
            "Vegetables                           test1");
    DefaultMutableTreeNode fruitNode = new DefaultMutableTreeNode(
            "test2                                " + "안녕하세요, 당신은 어떠세요");
    //add the child nodes to the root node
    root.add(vegetableNode);
    root.add(fruitNode);

    //create the tree by passing in the root node
    tree = new JTree(root);
    tree.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));       
    getContentPane().add(tree);

这是你期望看到的吗?在@AndrewThompson的图像中,这种字体看起来根本不是单间距的,V比t宽得多。在Arial Unicode中可能是MS,MS仅表示Microsoft,而不是单间隔。不,Andrew,这应该正确对齐。我有一张照片,但不知道如何附加在这里。嗨,托马斯,谢谢你的回复。是的,它不像你提到的那样是单间隔的。每个字符的大小都应该相同。我已经从这里的官方网站下载并安装了Arial Unicode MS字体。您好,AndrewThompson,谢谢您的提示。托马斯使用了字体。等距字体。此外,对于空格字符,它们只是为了在左文本和右文本之间创建一个空白,以便于清理。如果文本在这里和那里移动,则看起来不太好,而且右文本和左文本是动态的,这意味着左文本始终是英文的,并且字符数不同,右文本英语或其他语言和字符数各不相同。嗨,托马斯,谢谢你的回答,但请查看我最后的评论:-