/*
* 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.CheckingMode;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
/**
* @author boldrini
*/
public class CheckboxTreeApplet extends JApplet {
private static final long serialVersionUID = 1L;
private void createGUI() {
final CheckboxTree tree = new CheckboxTree();
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
// Events panel
JPanel eventsPanel = new JPanel();
Border eventsBorder = BorderFactory.createTitledBorder("Events");
eventsPanel.setBorder(eventsBorder);
final JTextArea textArea = new JTextArea(7, 20);
textArea.setLineWrap(true);
JScrollPane textPane = new JScrollPane(textArea);
tree.addTreeCheckingListener(
new TreeCheckingListener() {
@Override
public void valueChanged(TreeCheckingEvent e) {
// convert(e.getLeadingPath());
textArea.append("Checking event source: " + (e.getPath().getLastPathComponent()) + "\n");
}
// private void convert(TreePath changedPath) {
// Object[] path = changedPath.getPath();
// TreeModel tm = tree.getModel();
// for (int i = 0; i < path.length - 1; i++) {
// System.out.println(tm.getIndexOfChild(path[i], path[i + 1]));
// }
// System.out.println();
// }
}
);
eventsPanel.add(textPane);
// Modes panel
JPanel modesPanel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Checking Mode");
modesPanel.setBorder(border);
ButtonGroup group = new ButtonGroup();
JRadioButton aRadioButton = null;
final CheckingMode modes[] = {
CheckingMode.SIMPLE, CheckingMode.PROPAGATE, CheckingMode.PROPAGATE_PRESERVING_UNCHECK,
CheckingMode.PROPAGATE_PRESERVING_CHECK
};
for (int i = 0, n = modes.length; i < n; i++) {
final int g = i;
ActionListener modeListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
tree.getCheckingModel().clearChecking();
tree.getCheckingModel().setCheckingMode(modes[g]);
}
};
aRadioButton = new JRadioButton(modes[i].toString());
modesPanel.add(aRadioButton);
group.add(aRadioButton);
aRadioButton.addActionListener(modeListener);
}
aRadioButton.setSelected(true);
tree.getCheckingModel().setCheckingMode(CheckingMode.PROPAGATE_PRESERVING_CHECK);
// Actions Panel
JPanel commandsPanel = new JPanel(new GridLayout(0, 1));
Border commandsBorder = BorderFactory.createTitledBorder("Actions");
commandsPanel.setBorder(commandsBorder);
// expand all action
JButton actionButton = new JButton("Expand all");
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
tree.expandAll();
}
};
actionButton.addActionListener(actionListener);
commandsPanel.add(actionButton);
// clear all action
JButton clearButton = new JButton("Clear checking");
ActionListener clearListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
tree.clearChecking();
}
};
clearButton.addActionListener(clearListener);
commandsPanel.add(clearButton);
// add a children action
JButton addButton = new JButton("Add child");
ActionListener addListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
TreePath selected = tree.getSelectionPath();
if (selected != null) {
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selected.getLastPathComponent();
DefaultMutableTreeNode child = new DefaultMutableTreeNode("child " + (parent.getChildCount() + 1));
parent.add(child);
DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel();
dtm.nodesWereInserted(parent, new int[] { parent.getIndex(child) });
tree.expandPath(selected);
}
}
};
addButton.addActionListener(addListener);
commandsPanel.add(addButton);
// remove a children action
JButton removeButton = new JButton("Remove selected node");
ActionListener removeListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
TreePath selected = tree.getSelectionPath();
if (selected != null) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) selected.getLastPathComponent();
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) child.getParent();
if (parent != null) {
int index = parent.getIndex(child);
child.removeFromParent();
DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel();
dtm.nodesWereRemoved(parent, new int[] { index }, new TreeNode[] { child });
}
}
}
};
removeButton.addActionListener(removeListener);
commandsPanel.add(removeButton);
// Right panel
JPanel rightPanel = new JPanel(new GridLayout(0, 1));
rightPanel.add(modesPanel);
rightPanel.add(commandsPanel);
rightPanel.add(eventsPanel);
// Main panel
JSplitPane mainPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
mainPanel.add(new JScrollPane(tree));
mainPanel.add(rightPanel);
mainPanel.setSize(640, 480);
mainPanel.setDividerLocation(0.55);
mainPanel.setBorder(BorderFactory.createEtchedBorder());
getContentPane().add(mainPanel);
setSize(640, 480);
}
@Override
public void init() {
// Execute a job on the event-dispatching thread:
// creating this applet's GUI.
try {
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
createGUI();
}
});
} catch (Exception e) {
System.err.println("createGUI didn't successfully complete");
}
}
}