2017-05-01 1 views
0

Ich habe einen einfachen binären Baum Drucker: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; 
} 

Wenn ich es in der Eclipse-Konsole ausführen, erhalte ich:

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

Mein Problem ist, dass ich angezeigt werde versuchen, es auf einer UI, also wenn ich es auf dem JLabel es funktioniert nicht, habe ich versucht, es mit < html> und statt \ n -> < br> aber es funktioniert auch nicht, was ist der beste Weg das zu tun? Ich habe versucht mit einem JFormattedTextField, aber es scheint nicht zu funktionieren.

Vielen Dank.

+0

Eine Textdarstellung wie dies wahrscheinlich eine feste Breite-Schriftart verwenden wird gut funktionieren in einer grafischen Umgebung, sondern man könnte ein betrachten benutzerdefinierte Komponente, die die Struktur selbst oder ein 'JTree' zeichnen kann – MadProgrammer

Antwort

2

Es gibt eine Reihe von Möglichkeiten, wie Sie dies erreichen können. Sie könnten eine benutzerdefinierte Komponente erstellen, die die Struktur malen kann. Sie könnten eine JTree verwenden oder Sie könnten etwas wie eine JTextArea verwenden.

Der Trick sicher macht Sie

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