格式化 Jlabel - JTextBox

Format Jlabel - JTextBox

我有一个简单的二叉树打印机:

public String displayTree(){
    if(root != null){
        return this.toString(new StringBuilder(), true, new StringBuilder(), root).toString();
    }else{
        return "Empty tree";
    }
}   

private StringBuilder toString(StringBuilder prefix, boolean isLeft, StringBuilder sb, BinaryNode<T> node) {
    if(node.getRight() !=null) {
        toString(new StringBuilder().append(prefix).append(esIzquierdo ? "│   " : "    "), false, sb, node.getRight());
    }
    sb.append(prefix).append(isLeft? "└── " : "┌── ").append(node.getItem().toString()).append("\n");
    if(node.getLeft() != null) {
        toString(new StringBuilder().append(prefix).append(esIzquierdo ? "    " : "│   "), true, sb, node.getLeft());
    }
    return sb;
}

如果我在 eclipse 控制台中 运行 它,我得到:

     │           ┌── K
     │       ┌── F
     │       │   │   ┌── L
     │       │   └── J
     │   ┌── C
     │   │   │   ┌── I
     │   │   └── E
     └── A
         │       ┌── H
         │   ┌── D
         │   │   └── G
         └── B

我的问题是我试图在 UI 上显示它,所以当我把它放在 JLabel 上时它不起作用,我尝试用 < html 格式化它> 而不是 \n -> < br > 但它也不起作用,最好的方法是什么?我已尝试使用 JFormattedTextField,但它似乎不起作用。

谢谢。

您可以通过多种方式实现这一目标。您可以创建一个可以绘制结构的自定义组件;你可以使用 JTree 或者你可以使用像 JTextArea.

这样的东西

诀窍是确保您使用的是固定宽度的字体

String tree = "│           ┌── K\n"
        + "│       ┌── F\n"
        + "│       │   │   ┌── L\n"
        + "│       │   └── J\n"
        + "│   ┌── C\n"
        + "│   │   │   ┌── I\n"
        + "│   │   └── E\n"
        + "└── A\n"
        + "    │       ┌── H\n"
        + "    │   ┌── D\n"
        + "    │   │   └── G\n"
        + "    └── B";
JTextArea ta = new JTextArea(15, 25);
ta.setText(tree);
ta.setFont(new Font("Monospaced", Font.PLAIN, 13));
JFrame frame = new JFrame();
frame.add(new JScrollPane(ta));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);