簡體   English   中英

Swing:我如何將JTree與JTextPanes一起用作節點?

[英]Swing: How could I use JTree with JTextPanes as nodes?

JTree使用DefaultTreeCellRenderer作為單元格渲染器。
該類是JLabel的子類。

我想使用比JLabel更復雜的元素的JTree ,例如JTextPane

問題是:我不能將DefaultTreeCellRenderer子類化,因為它仍然是JLabel

編寫自己的TreeCellRenderer太復雜了。
為什么? 因為: DefaultTreeCellRenderer有17個字段,並且不僅僅是實現TreeCellRenderergetTreeCellRendererComponent(...)

你能設計出什么簡單的解決方案?

我需要樹元素是JTextPane才能執行復雜的格式化。

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的子類將使該方法的實現更加容易。

您仍然可以getTreeCellRendererComponent DefaultTreeCellRenderer的子類,並僅覆蓋getTreeCellRendererComponent方法,以返回按您希望的格式化的JTextPane組件。 你仍然需要做很多DefaultTreeCellRenderer在其實現中所做的事情,但你不必為這17個左右的字段的維護方面而煩惱。

編輯在閱讀注釋后刪除了JTextField編輯器解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM