/*
* Copyright 2007-2010 Enrico Boldrini, Lorenzo Bigagli This file is part of
* CheckboxTree. CheckboxTree is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. CheckboxTree is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with CheckboxTree; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA
*/
package it.cnr.imaa.essi.lablib.gui.checkboxtree.examples;
import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;
import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingEvent;
import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingListener;
import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingModel;
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
/**
* A simple example of the CheckboxTree with key listeners: 'a' for add a node
* 'r' for remove 'SPACE' toggles the checking of the given node.
* @author bigagli
* @author boldrini
*/
public class CheckboxTreeExample extends JFrame {
private static final long serialVersionUID = 1L;
private class RefreshListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
TreePath p = CheckboxTreeExample.this.checkboxTree.getSelectionPath();
DefaultMutableTreeNode resource = null;
if (p != null) {
System.out.println("selection path: " + p.toString());
resource = (DefaultMutableTreeNode) p.getLastPathComponent();
}
if (e.getKeyChar() == 'r') {
if (resource != null) {
TreeNode parent = resource.getParent();
int index = parent.getIndex(resource);
System.out.println("Removing " + resource.toString());
resource.removeFromParent();
DefaultTreeModel dtm = (DefaultTreeModel) CheckboxTreeExample.this.checkboxTree.getModel();
// dtm.nodeStructureChanged(parent);
dtm.nodesWereRemoved(parent, new int[] { index }, new TreeNode[] { resource });
}
}
if (e.getKeyChar() == 'a') {
if (resource != null) {
System.out.println("Adding to " + resource.toString());
DefaultTreeModel dtm = (DefaultTreeModel) CheckboxTreeExample.this.checkboxTree.getModel();
DefaultMutableTreeNode node = new DefaultMutableTreeNode("test");
resource.add(node);
dtm.nodesWereInserted(resource, new int[] { resource.getIndex(node) });
System.out.println("posizione: " + resource.getIndex(node));
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
public static void main(String[] args) {
CheckboxTreeExample test = new CheckboxTreeExample();
test.setVisible(true);
}
private CheckboxTree checkboxTree = null;
private javax.swing.JPanel jContentPane = null;
/**
* This is the default constructor
*/
public CheckboxTreeExample() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 600);
this.setContentPane(getJContentPane());
this.setTitle("CheckboxTree");
}
/**
* Initialize the tree.
*/
private JScrollPane getCheckboxTree() {
if (this.checkboxTree == null) {
this.checkboxTree = new CheckboxTree();
this.checkboxTree.addKeyListener(new RefreshListener());
System.out.println(this.checkboxTree.toString());
this.checkboxTree.getCheckingModel().setCheckingMode(TreeCheckingModel.CheckingMode.PROPAGATE);
this.checkboxTree.setRootVisible(true);
this.checkboxTree.setEnabled(true);
this.checkboxTree.expandAll();
DefaultMutableTreeNode mn = (DefaultMutableTreeNode) this.checkboxTree.getModel().getRoot();
mn = (DefaultMutableTreeNode) mn.getChildAt(2);
mn = (DefaultMutableTreeNode) mn.getChildAt(2);
System.out.println("row number: " + this.checkboxTree.getRowForPath(new TreePath(mn.getPath())));
this.checkboxTree.addCheckingPath(new TreePath(mn.getPath()));
this.checkboxTree.addTreeCheckingListener(
new TreeCheckingListener() {
@Override
public void valueChanged(TreeCheckingEvent e) {
System.out.println("checking set changed, leading path: " + ((TreeNode) e.getPath().getLastPathComponent()).toString());
System.out.println("checking roots: ");
TreePath[] cr = CheckboxTreeExample.this.checkboxTree.getCheckingRoots();
for (TreePath path : cr) {
System.out.println(path.getLastPathComponent());
}
}
}
);
}
return new JScrollPane(this.checkboxTree);
}
/**
* This method initializes jContentPane
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (this.jContentPane == null) {
this.jContentPane = new JPanel();
this.jContentPane.setLayout(new BorderLayout());
this.jContentPane.add(getCheckboxTree(), BorderLayout.CENTER);
}
return this.jContentPane;
}
}