3 Stimmen

Schwingen: Wie kann ich JTree mit JTextPanes als Knoten verwenden?

JTree utiliza DefaultTreeCellRenderer als Zell-Renderer.
Diese Klasse ist eine Unterklasse von JLabel .

Ich möchte die JTree mit komplexeren Elementen als JLabel , wie zum Beispiel JTextPane .

Das Problem ist: Ich kann keine Unterklasse DefaultTreeCellRenderer weil es wäre immer noch ein JLabel .

Schreiben einer eigenen TreeCellRenderer zu komplex ist.
Warum? Weil: DefaultTreeCellRenderer hat 17 Felder, und leistet viel mehr als nur die Implementierung TreeCellRenderer 's getTreeCellRendererComponent(...) .

Welche einfache Lösung können Sie sich vorstellen?

Die Baumelemente müssen sein JTextPane s, um eine komplexe Formatierung durchführen zu können.

1voto

jjnguy Punkte 132790
public class JTextPaneTreeCellRenderer extends JTextPane implements TreeCellRenderer {

Methode:

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

    // do stuff to this instance of JTextPane
    setEditable(selected);
    setText(value.toString()); //Assumes whatever you stuck in the tree has pretty toString

    if (leaf)
        setBackgroundColor(Color.RED);
    return this;
}

Sie müssen nicht so komplex sein wie die Standardimplementierung. Wenn Sie die Renedere zu einer Unterklasse von JTextPane wird die Umsetzung der Methode erheblich erleichtern.

0voto

akf Punkte 37387

Sie könnten immer noch die Unterklasse DefaultTreeCellRenderer verwenden und nur die getTreeCellRendererComponent Methode zur Rückgabe der JTextPane Komponente so formatiert, wie Sie es wünschen. Sie müssten immer noch viel von dem tun, was DefaultTreeCellRenderer in seiner Implementierung tut, aber Sie müssten sich nicht mit dem Wartungsaspekt dieser 17 oder so Felder beschäftigen.

bearbeiten die Lösung mit dem JTextField-Editor wurde nach dem Lesen der Kommentare entfernt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X