From: "Stephan Hoffmann" <Stephan.LIMITEDHoffmann@de.bosch.com>
Path: news.mathworks.com!newsfeed-00.mathworks.com!webcrossing
Newsgroups: comp.soft-sys.matlab
Subject: Including CheckNodeTree.java to a Matlab GUI
Message-ID: <ef5a699.-1@webcrossing.raydaftYaTP>
Date: Tue, 12 Jun 2007 10:21:53 -0400
Lines: 144
NNTP-Posting-Host: 194.39.218.10
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
Xref: news.mathworks.com comp.soft-sys.matlab:413634



Hello,

i found a great Java class: "CheckNodeTree".
It builds a tree, each node own a check box for activation or
deactivation.

I tried to include this class in Matlab, without sucess.

With:
tr = CheckNodeTree;
tr.setVisible(true);
... it runs in it own window.

But if I try to include it to a figure, using JavaComponent I receive
lots of errors.

Can anyone try it and help me?

Here the Javaclass:

import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.plaf.ColorUIResource;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.tree.TreeModel;
import java.awt.event.*;
import java.util.Enumeration;
import javax.swing.border.TitledBorder;

/**
 * ?Chcek?JTree??
 * @version 1.1 01/15/99
 */
public class CheckNodeTree extends JTree {

 public CheckNodeTree() {
  this(new DefaultTreeModel(null));
 }

 public CheckNodeTree(TreeModel model) {
  super(model);

  setCellRenderer(new CheckRenderer());
 
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SE
LECTION);
  addMouseListener(new NodeSelectionListener(this));
 }

 class NodeSelectionListener extends MouseAdapter {
  JTree tree;

  NodeSelectionListener(JTree tree) {
   this.tree = tree;
  }

  public void mouseClicked(MouseEvent e) {
   int x = e.getX();
   int y = e.getY();
   int row = tree.getRowForLocation(x, y);
   TreePath path = tree.getPathForRow(row);
   if (path != null) {
    DefaultMutableTreeNode node =
(DefaultMutableTreeNode)path.getLastPathComponent();
    if (node instanceof CheckNode) {
     CheckNode chNode = (CheckNode) node;
     boolean isSelected = ! (chNode.isSelected());
     chNode.setSelected(isSelected);
     if (chNode.getSelectionMode() == CheckNode.DIG_IN_SELECTION) {
      if ( isSelected) {
       tree.expandPath(path);
      } else {
       tree.collapsePath(path);
      }
     }
     ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
     // I need revalidate if node is root. but why?
       if (row == 0) {
        tree.revalidate();
        tree.repaint();
       }
    }
   }
  }
 }

 public static void main(String args[]) {
  String[] strs = {"swing", // 0
    "platf", // 1
    "basic", // 2
    "metal", // 3
  "JTree"}; // 4

  CheckNode[] nodes = new CheckNode[strs.length];
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
  for (int i=0;i<strs.length;i++) {
   nodes[i] = new CheckNode(strs[i]);
  }
  root.add(nodes[0]);
  nodes[0].add(nodes[1]);
  nodes[1].add(nodes[2]);
  nodes[1].add(nodes[3]);
  nodes[0].add(nodes[4]);
  DefaultTreeModel model = new DefaultTreeModel(root);
  CheckNodeTree tree = new CheckNodeTree(model);
  JFrame frame = new JFrame("??");
  frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  JScrollPane jsp = new JScrollPane(tree);
  frame.getContentPane().setLayout(new BorderLayout());
  frame.getContentPane().add(jsp, BorderLayout.CENTER);
  frame.setSize(300, 200);
  frame.setVisible(true);
 }
}

class CheckRenderer extends JPanel implements TreeCellRenderer {
 protected JCheckBox check;

 protected TreeLabel label;
 DefaultTreeCellRenderer dtcr = new DefaultTreeCellRenderer();
 public Chec