3

JTreeDefaultTreeCellRendererセルレンダラーとして使用します。
このクラスはのサブクラスですJLabel

など JTreeよりも複雑な要素で使用したい。JLabelJTextPane

問題は次のとおりです。サブクラス化することはできません。DefaultTreeCellRendererそれでも。であるためJLabelです。

自分で書くのTreeCellRendererは複雑すぎます。
なんで?理由:には17のフィールドがあり、 's DefaultTreeCellRendererを実装するだけではありません。TreeCellRenderergetTreeCellRendererComponent(...)

どのような簡単な解決策を考案できますか?

JTextPane複雑なフォーマットを実行できるようにするには、ツリー要素が必要です。

4

2 に答える 2

1
public class JTextPaneTreeCellRenderer extends JTextPane implements TreeCellRenderer {

方法:

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

デフォルトの実装ほど複雑にする必要はありません。Renedere を のサブクラスにJTextPaneすると、メソッドの実装がはるかに簡単になります。

于 2009-07-06T20:51:40.340 に答える
0

DefaultTreeCellRenderer をサブクラス化し、メソッドだけをオーバーライドして、必要に応じてフォーマットされgetTreeCellRendererComponentたコンポーネントを返すこともできます。JTextPaneDefaultTreeCellRenderer がその実装で行う多くのことを行う必要がありますが、それらの 17 ほどのフィールドの保守面を気にする必要はありません。

editは、コメントを読んだ後に JTextField エディター ソリューションを削除しました

于 2009-07-06T20:39:25.357 に答える