2009-07-06 4 views
3

JTree은 셀 렌더러로 DefaultTreeCellRenderer을 사용합니다.
이 클래스는 JLabel의 하위 클래스입니다.스윙 : 어떻게 JTextPanes와 함께 JTree를 노드로 사용할 수 있습니까?

JTreeJLabel보다 복잡한 요소 (예 : JTextPane)로 사용하고 싶습니다.

문제는 이 여전히 JLabel이므로 DefaultTreeCellRenderer을 하위 클래스로 만들 수 없습니다.

자신의 TreeCellRenderer 쓰기는 너무 복잡합니다.
왜? 왜냐하면 DefaultTreeCellRenderer은 17 개의 필드를 가지고 있으며, 을 구현하고 TreeCellRenderergetTreeCellRendererComponent(...)을 구현하는 것 이상의 기능을 수행합니다.

어떤 간단한 해결책을 고안 할 수 있습니까?

복잡한 서식을 수행하려면 tree 요소가 JTextPane이어야합니다.

+0

JTextPane에는 무엇이 필요합니까? – Peter

+0

인터페이스를 구현해야합니다. 너무 열심히해서는 안됩니다. 사실, 나는 그런 GUI 물건으로 엉망이 재미 찾으십시오. – jjnguy

답변

0

DefaultTreeCellRenderer을 서브 클래스 화하고 getTreeCellRendererComponent 메서드를 재정의하여 JTextPane 구성 요소를 원하는 형식으로 반환 할 수 있습니다. DefaultTreeCellRenderer가 구현에서 수행하는 많은 작업을 여전히 수행해야하지만, 이러한 17 개 필드의 유지 관리 측면을 고민하지 않아도됩니다. 당신은 기본 구현만큼 복잡 할 필요가 없습니다

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

:

편집 읽고 의견

+0

아니요, 셀 편집기입니다. 이를 위해 추상적 추상 클래스 인 AbstractCellEditor –

1
public class JTextPaneTreeCellRenderer extends JTextPane implements TreeCellRenderer { 

방법 후 JTextField를 편집기 솔루션을 제거했습니다. Renedere를 JTextPane의 하위 클래스로 만들면 메서드를 훨씬 쉽게 구현할 수 있습니다.

+0

도 있습니다.이 방법을 사용하면 '청소기'라고 주장 할 수도 있습니다. – akf

관련 문제