EarthWeb
Developer.com
Site
windows 2000
visual c++
java
visual basic
javascripts
recommend it
 
Book
thinking in java
 
Interact
forum
guest book
jobs
jokes
what's new

share code
 
Resource
add resource
modify resource
new resource
 

[Internet Jobs]
-----
Java by E-mail:

Get the weekly e-mail highlights on Java!
-----

-

Multi-line tree items


Author: Nobuo Tamemasa

Display the tree items using multiple lines.

multi-line tree


// File: MultiLineTreeExample.java
/* (swing1.1beta3) */
//package jp.gr.java_conf.tame.swing.examples;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import jp.gr.java_conf.tame.swing.tree.*;


/**
 * @version 1.0 11/09/98
 */
public class MultiLineTreeExample extends JFrame {
  public MultiLineTreeExample() {
    super("Multi-Line JTree Example");

    String[] strs = { "swing",              // 0
                      "package",            // 1
                      "java.awt.swing\n"
                    + "com.sun.java.swing", // 2
                      "javax.swing",        // 3
                      "JTree"};             // 4
                                             
    DefaultMutableTreeNode[] nodes = new DefaultMutableTreeNode[strs.length];
    for (int i=0;i<strs.length;i++) {
      nodes[i] = new DefaultMutableTreeNode(strs[i]); 
    }
    nodes[0].add(nodes[1]);
    nodes[1].add(nodes[2]);
    nodes[1].add(nodes[3]);
    nodes[0].add(nodes[4]);

    JTree tree = new JTree( nodes[0] );
    tree.setCellRenderer(new MultiLineCellRenderer());
    JScrollPane sp = new JScrollPane();
    sp.getViewport().add(tree);
    getContentPane().add(sp, BorderLayout.CENTER);
  }

  public static void main(String args[]) {
    MultiLineTreeExample frame = new MultiLineTreeExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}






// File: MultiLineCellRenderer.java
/*  (swing1.1beta3) swing#977 */
 
package jp.gr.java_conf.tame.swing.tree;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.ColorUIResource;

/**
 * @version 1.0 11/09/98
 */
public class MultiLineCellRenderer extends JPanel implements TreeCellRenderer {
  protected JLabel       icon;
  protected TreeTextArea text;
  
  public MultiLineCellRenderer() {
    setLayout(new BoxLayout(this,BoxLayout.X_AXIS));    
    icon = new JLabel() {    
      public void setBackground(Color color) {
        if(color instanceof ColorUIResource)
          color = null;
        super.setBackground(color);
      }   
    };   
    add(icon);
    add(Box.createHorizontalStrut(4));
    add(text  = new TreeTextArea());
  }

  public Component getTreeCellRendererComponent(JTree tree, Object value,
               boolean isSelected, boolean expanded,
               boolean leaf, int row, boolean hasFocus) {
    String  stringValue = tree.convertValueToText(value, isSelected,
                        expanded, leaf, row, hasFocus);
    setEnabled(tree.isEnabled());
    text.setText(stringValue);
    text.setSelect(isSelected);
    text.setFocus(hasFocus);
    if (leaf) {
      icon.setIcon(UIManager.getIcon("Tree.leafIcon"));
    } else if (expanded) {
      icon.setIcon(UIManager.getIcon("Tree.openIcon"));
    } else {
      icon.setIcon(UIManager.getIcon("Tree.closedIcon"));
    }       
    return this;
  }
  
  public Dimension getPreferredSize() {
    Dimension iconD = icon.getPreferredSize();
    Dimension textD = text.getPreferredSize();
    int height = iconD.height < textD.height ?
                 textD.height : iconD.height;
    return new Dimension(iconD.width + textD.width, height);
  }
   
  public void setBackground(Color color) {
    if (color instanceof ColorUIResource)
      color = null;
    super.setBackground(color);
  }
        
  class TreeTextArea extends JTextArea {
    Dimension preferredSize;
    
    TreeTextArea() {
      setLineWrap(true);
      setWrapStyleWord(true);
      setOpaque(true);
    }
    
    public void setBackground(Color color) {
        if(color instanceof ColorUIResource)
            color = null;
        super.setBackground(color);
    }   
 
    public void setPreferredSize(Dimension d) {
      if (d != null) {
        preferredSize = d;
      }
    }
 
    public Dimension getPreferredSize() {
      return preferredSize;
    }

    public void setText(String str) {
      FontMetrics fm = getToolkit().getFontMetrics(getFont());
      BufferedReader br = new BufferedReader(new StringReader(str));
      String line;
      int maxWidth = 0,lines = 0;
      try {
        while ((line = br.readLine()) != null) {
          int width = SwingUtilities.computeStringWidth(fm,line);
          if (maxWidth < width) {
            maxWidth = width;
          }
          lines++;
        }
      } catch (IOException ex) {
        ex.printStackTrace();
      }   
      lines = (lines < 1) ? 1: lines;  
      int height = fm.getHeight() * lines;
      setPreferredSize(new Dimension(maxWidth +6,height));
      super.setText(str);
    }
    
    void setSelect(boolean isSelected) {
      Color bColor;
      if (isSelected) {
        bColor = UIManager.getColor("Tree.selectionBackground");
      } else {
        bColor = UIManager.getColor("Tree.textBackground");
      }
      super.setBackground(bColor);
    }
    
    void setFocus(boolean hasFocus) {
      if (hasFocus) {
        Color lineColor = UIManager.getColor("Tree.selectionBorderColor");
        setBorder(BorderFactory.createLineBorder(lineColor));
      } else {
        setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
      }      
    }
  }
}




Posted On: 3-Jan-1999

internet.commerce



Acceptable Use Policy

internet.comMediabistrojusttechjobs.comGraphics.com

WebMediaBrands Corporate Info


Advertise | Newsletters | Feedback | Submit News

Legal Notices | Licensing | Permissions | Privacy Policy