/*
* @(#)CheckBoxTreeDemo.java 9/10/2005
*
* Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
*/
import com.jidesoft.icons.IconsFactory;
import com.jidesoft.plaf.LookAndFeelFactory;
import com.jidesoft.swing.*;
import com.jidesoft.tree.TreeUtils;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Demoed Component: {@link com.jidesoft.swing.CheckBoxTree}
Required jar files: jide-common.jar, jide-grids.jar
*
Required L&F: any L&F
*/
public class CheckBoxTreeDemo {
private static final long serialVersionUID = 6399345108812286281L;
private CheckBoxTree _tree;
private static final String SINGLE_SELECTION = "Single Selection";
private static final String CONTIGUOUS_SELECTION = "Contiguous Selection";
private static final String DISCONTIGUOUS_SELECTION = "Discontiguous Selection";
public CheckBoxTreeDemo() {
}
public String getName() {
return "CheckBoxTree Demo";
}
public Component getOptionsPanel() {
JPanel panel = new JPanel();
panel.setLayout(new JideBoxLayout(panel, BoxLayout.Y_AXIS, 3));
final JButton selectAll = new JButton(new AbstractAction("Select The Second Leaf Node") {
private static final long serialVersionUID = -5580913906799074020L;
public void actionPerformed(ActionEvent e) {
TreeModel treeModel = _tree.getModel();
Object child = treeModel.getChild(treeModel.getChild(treeModel.getRoot(), 0), 2);
if (child instanceof DefaultMutableTreeNode) {
TreePath path = new TreePath(((DefaultMutableTreeNode) child).getPath());
_tree.getCheckBoxTreeSelectionModel().addSelectionPath(path);
}
}
});
JButton clearAll = new JButton(new AbstractAction("Clear All") {
private static final long serialVersionUID = -2500587806953898010L;
public void actionPerformed(ActionEvent e) {
_tree.getCheckBoxTreeSelectionModel().clearSelection();
}
});
final JCheckBox digIn = new JCheckBox("Dig In");
digIn.addActionListener(new AbstractAction() {
private static final long serialVersionUID = 3184279982208173561L;
public void actionPerformed(ActionEvent e) {
_tree.getCheckBoxTreeSelectionModel().setDigIn(digIn.isSelected());
selectAll.setEnabled(digIn.isSelected());
}
});
digIn.setSelected(_tree.getCheckBoxTreeSelectionModel().isDigIn());
final JCheckBox checkBoxEnabled = new JCheckBox("CheckBox Enabled");
checkBoxEnabled.addActionListener(new AbstractAction() {
private static final long serialVersionUID = 7752042312121853308L;
public void actionPerformed(ActionEvent e) {
_tree.setCheckBoxEnabled(checkBoxEnabled.isSelected());
}
});
checkBoxEnabled.setSelected(_tree.isCheckBoxEnabled());
final JCheckBox clickInCheckBoxOnly = new JCheckBox("Click only valid in CheckBox");
clickInCheckBoxOnly.addActionListener(new AbstractAction() {
private static final long serialVersionUID = 5234198740430142668L;
public void actionPerformed(ActionEvent e) {
_tree.setClickInCheckBoxOnly(clickInCheckBoxOnly.isSelected());
}
});
clickInCheckBoxOnly.setSelected(_tree.isClickInCheckBoxOnly());
final JCheckBox treeEnabled = new JCheckBox("Tree Enabled ");
treeEnabled.addActionListener(new AbstractAction() {
private static final long serialVersionUID = -1027526532901305794L;
public void actionPerformed(ActionEvent e) {
_tree.setEnabled(treeEnabled.isSelected());
}
});
treeEnabled.setSelected(_tree.isEnabled());
final JCheckBox selectPartialFirst = new JCheckBox("Select Partial ");
selectPartialFirst.addActionListener(new AbstractAction() {
private static final long serialVersionUID = 6687098092701174807L;
public void actionPerformed(ActionEvent e) {
_tree.setSelectPartialOnToggling(selectPartialFirst.isSelected());
}
});
selectPartialFirst.setSelected(_tree.isSelectPartialOnToggling());
String[] selectionModes = new String[]{
CheckBoxTreeDemo.SINGLE_SELECTION,
CheckBoxTreeDemo.CONTIGUOUS_SELECTION,
CheckBoxTreeDemo.DISCONTIGUOUS_SELECTION
};
JComboBox comboBox = new JComboBox(selectionModes);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED && e.getItem() instanceof String) {
if ((e.getItem()).equals(CheckBoxTreeDemo.SINGLE_SELECTION)) {
_tree.getCheckBoxTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
}
else if ((e.getItem()).equals(CheckBoxTreeDemo.CONTIGUOUS_SELECTION)) {
_tree.getCheckBoxTreeSelectionModel().setSelectionMode(TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);
}
else {
_tree.getCheckBoxTreeSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
}
}
}
});
int mode = _tree.getCheckBoxTreeSelectionModel().getSelectionMode();
switch (mode) {
case TreeSelectionModel.SINGLE_TREE_SELECTION:
comboBox.setSelectedIndex(0);
break;
case TreeSelectionModel.CONTIGUOUS_TREE_SELECTION:
comboBox.setSelectedIndex(1);
break;
case TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION:
comboBox.setSelectedIndex(2);
break;
}
final JCheckBox singleEventMode = new JCheckBox("Single Event Mode");
singleEventMode.addActionListener(new AbstractAction() {
private static final long serialVersionUID = -8967823755465307651L;
public void actionPerformed(ActionEvent e) {
_tree.getCheckBoxTreeSelectionModel().setSingleEventMode(singleEventMode.isSelected());
}
});
singleEventMode.setSelected(_tree.getCheckBoxTreeSelectionModel().isSingleEventMode());
panel.add(new JLabel("Set Selection Mode:"));
panel.add(comboBox);
panel.add(Box.createVerticalStrut(3));
panel.add(digIn);
panel.add(singleEventMode);
panel.add(checkBoxEnabled);
panel.add(clickInCheckBoxOnly);
panel.add(treeEnabled);
panel.add(selectPartialFirst);
panel.add(Box.createVerticalStrut(3));
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 6, 6));
buttonPanel.add(selectAll);
buttonPanel.add(clearAll);
panel.add(buttonPanel);
panel.add(Box.createGlue());
return panel;
}
public Component getDemoPanel() {
JPanel panel = new JPanel(new BorderLayout(6, 6));
final TreeModel treeModel = DemoData.createSongTreeModel();
JPanel treePanel = new JPanel(new BorderLayout(2, 2));
treePanel.setBorder(BorderFactory.createCompoundBorder(new JideTitledBorder(new PartialEtchedBorder(PartialEtchedBorder.LOWERED, PartialSide.NORTH), "Albums", JideTitledBorder.LEADING, JideTitledBorder.ABOVE_TOP),
BorderFactory.createEmptyBorder(6, 0, 0, 0)));
_tree = new CheckBoxTree(treeModel) {
@Override
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(400, 400);
}
};
_tree.setRootVisible(false);
_tree.setShowsRootHandles(true);
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) _tree.getActualCellRenderer();
renderer.setLeafIcon(IconsFactory.getImageIcon(QuickFilterTreeDemo.class, "/icons/song.png"));
renderer.setClosedIcon(IconsFactory.getImageIcon(QuickFilterTreeDemo.class, "/icons/album.png"));
renderer.setOpenIcon(IconsFactory.getImageIcon(QuickFilterTreeDemo.class, "/icons/album.png"));
SearchableUtils.installSearchable(_tree);
TreeUtils.expandAll(_tree, true);
JPanel listsPanel = new JPanel(new GridLayout(1, 2));
final JList selectedList = new JList();
final JList eventsList = new JList();
final DefaultListModel eventsModel = new DefaultListModel();
_tree.getCheckBoxTreeSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath[] paths = e.getPaths();
for (TreePath path : paths) {
eventsModel.addElement((e.isAddedPath(path) ? "Added - " : "Removed - ") + path);
}
eventsModel.addElement("---------------");
eventsList.ensureIndexIsVisible(eventsModel.size() - 1);
TreePath[] treePaths = _tree.getCheckBoxTreeSelectionModel().getSelectionPaths();
DefaultListModel selectedModel = new DefaultListModel();
if (treePaths != null) {
for (TreePath path : treePaths) {
selectedModel.addElement(path);
}
}
selectedList.setModel(selectedModel);
}
});
eventsList.setModel(eventsModel);
selectedList.setVisibleRowCount(8);
eventsList.setVisibleRowCount(8);
JPanel selectedPanel = new JPanel(new BorderLayout());
selectedPanel.setBorder(BorderFactory.createCompoundBorder(new JideTitledBorder(new PartialEtchedBorder(PartialEtchedBorder.LOWERED, PartialSide.NORTH), "Selected Songs", JideTitledBorder.LEADING, JideTitledBorder.ABOVE_TOP),
BorderFactory.createEmptyBorder(6, 0, 0, 0)));
selectedPanel.add(new JScrollPane(selectedList));
JPanel eventsPanel = new JPanel(new BorderLayout());
eventsPanel.setBorder(BorderFactory.createCompoundBorder(new JideTitledBorder(new PartialEtchedBorder(PartialEtchedBorder.LOWERED, PartialSide.NORTH), "Event Fired", JideTitledBorder.LEADING, JideTitledBorder.ABOVE_TOP),
BorderFactory.createEmptyBorder(6, 0, 0, 0)));
eventsPanel.add(new JScrollPane(eventsList));
listsPanel.add(selectedPanel);
listsPanel.add(eventsPanel);
treePanel.add(listsPanel, BorderLayout.AFTER_LAST_LINE);
treePanel.add(new JScrollPane(_tree));
panel.add(treePanel);
return panel;
}
public String getDemoFolder() {
return "B16.CheckBoxTree";
}
static public void main(String[] s) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
LookAndFeelFactory.installDefaultLookAndFeelAndExtension();
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CheckBoxTreeDemo demo = new CheckBoxTreeDemo();
frame.getContentPane().add(demo.getDemoPanel());
frame.getContentPane().add(demo.getOptionsPanel(), BorderLayout.AFTER_LINE_ENDS);
frame.pack();
frame.setVisible(true);
}
});
}
}