From: "Stephan Hoffmann" <Stephan.LIMITEDHoffmann@de.bosch.com>
Path: news.mathworks.com!newsfeed-00.mathworks.com!webcrossing
Newsgroups: comp.soft-sys.matlab
Subject: Re: Including CheckNodeTree.java to a Matlab GUI
Message-ID: <ef5a699.7@webcrossing.raydaftYaTP>
Date: Thu, 28 Jun 2007 03:24:33 -0400
References: <ef5a699.-1@webcrossing.raydaftYaTP>
Lines: 150
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:416139



Stephan Hoffmann wrote:
>
>
> 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