2017-05-01 31 views
0

我有一個簡單的二叉樹打印機:格式的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 

我的問題是,我試圖顯示它在一個用戶界面上,所以當我把它放在JLabel上它不起作用時,我嘗試用它格式化它,而不是\ n - > < br>但它也不起作用,什麼是最好的方法做到這一點?我嘗試過使用JFormattedTextField,但它似乎不起作用。

謝謝。

+0

像這可能是要在圖形環境中很好地工作的文本表示,相反,你可以考慮自定義組件,可以繪製結構本身或JTree – MadProgrammer

回答

2

有很多可能的方法可以實現這一點。您可以創建一個可以繪製結構的自定義組件;你可以使用JTree或者你可以使用類似JTextArea的東西。

訣竅是確保您使用的是固定寬度的字體

JTextArea representation

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);