[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

JTextArea as JTree node label

Posted on 2004-10-26
9
Medium Priority
?
1,043 Views
Last Modified: 2012-06-27
Hi

I want my JTree to display a JTextArea as its node label.
For example:
When a node minimizes, only the 1st line of the text string is shown.
When a node expandes, the entire multi-line text string is shown.
 
It would look this:

Root +----LABEL A line 1
        |     LABEL A line 2
        |     .....
        |    
        +----LABEL B Line 1

I try extending javax.swing.tree.DefaultTreeCellRenderer
but I could not get it to display a JTextArea as the node label.

How should I approach this problem ?

Is there any sample source code out there ?

Any commercial UI javabean that can do this ?

I would appreciate any comment or suggestion.



0
Comment
Question by:csunlistek
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
9 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 12413968
>>
I try extending javax.swing.tree.DefaultTreeCellRenderer
but I could not get it to display a JTextArea as the node label.
>>

Can you post your code?

0
 

Author Comment

by:csunlistek
ID: 12415144
Yes, here is my latest test code. tested under JDK 1.4.2.
It implements TreeCellRenderer.
It was at least able to display a JTextArea as a tree node
but it has the following problems:

1. resizing. How do I get the width of JTextArea to fit the width of the frame ?
2. border. How do I draw the border around JTextArea to show the boundary of text ?

Thanks for any suggestion.  sample code would be useful.

-------------------------------------------------------------------------------

package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class MyJTree extends JPanel {

  public MyJTree() {
    setLayout(new BorderLayout());
    // init data model
    String dummyText="";
    for (int i = 0; i < 10; i++) dummyText +=" ABCDE"; // dummy text string
    //for (int i = 0; i < 10; i++) dummyText +=" ABCDE \n"; // shows multiline here
    DefaultMutableTreeNode root =  new DefaultMutableTreeNode("root");
    for (int i = 0; i < 3; i++) {
      DefaultMutableTreeNode child = new DefaultMutableTreeNode("Child "+i + dummyText);
      root.add( child );
      for (int  j= 0; j < 3; j++)
        child.add( new DefaultMutableTreeNode("GrandChild "+i+"."+ j + dummyText));
    }
    DefaultTreeModel model = new DefaultTreeModel(root);
    // create tree UI
    JTree tree = new JTree(model);
     // Change the cell renderer
     tree.setCellRenderer(new CellRenderer());
     // Put tree in a scrollable pane
     JScrollPane sp = new JScrollPane(tree);
     add(sp, BorderLayout.CENTER);
  }

  // my cell renderer
 class CellRenderer implements TreeCellRenderer {
      JTextArea renderer;

      CellRenderer () {
        renderer = new JTextArea();
        renderer.setWrapStyleWord(true);
        renderer.setLineWrap(true);
        renderer.setOpaque (true);
      }

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

        // Change background color based on selected state
        Color background = (selected ? Color.lightGray : Color.white);
        renderer.setBackground(background);

        String text = value.toString();

        if (expanded) { // in expanded state, display all text
          renderer.setText(text);
          renderer.setPreferredSize(new Dimension(200,80));
        } else { // in minimized state, display 1st 10 chars
          renderer.setText( (text.length()>10 ?  text.substring(0, 10) : text) );
          renderer.setPreferredSize(new Dimension(200,20));
        }
        return renderer;
      }
    }


    public static void main(String[] args) {
      MyJTree t = new MyJTree();
      JFrame frame = new JFrame();
      frame.getContentPane().add(t);
      frame.setSize(300, 300);
      frame.setVisible(true);
    }


}
0
 

Author Comment

by:csunlistek
ID: 12415228
One more question to add to above:

3. Editing. How do I make the JTextArea as tree node editable ?
It appears the CellRenderer approach is designed for display text, not for in-place text editing.

Maybe I approach the whole problem in the wrong way ???

0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 92

Expert Comment

by:objects
ID: 12416644
You need to create a TreeCellEditor, as well as a TreeCellRenderer.
0
 
LVL 92

Accepted Solution

by:
objects earned 2000 total points
ID: 12417570
0
 
LVL 5

Expert Comment

by:Naeemg
ID: 12418651
objects referenced website is fine. go there and download that java file.
0
 

Author Comment

by:csunlistek
ID: 12427035
The sample codes do not work exactly as I had in mind (editing, border, auto JTextArea width adjustment, line wrap, etc) but they provide a good starting point, enough to get me going again.

Thanks for all the help.
0
 
LVL 92

Expert Comment

by:objects
ID: 12427958
(:
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
Suggested Courses

649 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question