package test.check.decoration; import java.awt.*; import java.util.Enumeration; import javax.swing.*; import javax.swing.tree.*; import org.pushingpixels.substance.api.DecorationAreaType; import org.pushingpixels.substance.api.SubstanceLookAndFeel; import org.pushingpixels.substance.api.skin.MistSilverSkin; import test.check.SubstanceSkinComboSelector; public class DecorationTrees extends JFrame { private static class TreePanel extends JPanel { public TreePanel(String caption, DecorationAreaType decorationAreaType, boolean isEnabled) { super(new BorderLayout()); SubstanceLookAndFeel.setDecorationType(this, decorationAreaType); JLabel captionLabel = new JLabel(" " + caption); Font font = captionLabel.getFont(); captionLabel.setFont(font.deriveFont(Font.BOLD)); this.add(captionLabel, BorderLayout.NORTH); DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); DefaultMutableTreeNode son1 = new DefaultMutableTreeNode("son1"); DefaultMutableTreeNode son2 = new DefaultMutableTreeNode("son2"); DefaultMutableTreeNode son3 = new DefaultMutableTreeNode("son3"); DefaultMutableTreeNode gson11 = new DefaultMutableTreeNode("gson11"); DefaultMutableTreeNode gson12 = new DefaultMutableTreeNode("gson12"); DefaultMutableTreeNode gson21 = new DefaultMutableTreeNode("gson21"); DefaultMutableTreeNode gson22 = new DefaultMutableTreeNode("gson22"); DefaultMutableTreeNode gson31 = new DefaultMutableTreeNode("gson31"); DefaultMutableTreeNode gson32 = new DefaultMutableTreeNode("gson32"); DefaultMutableTreeNode ggson111 = new DefaultMutableTreeNode( "ggson111"); DefaultMutableTreeNode ggson112 = new DefaultMutableTreeNode( "ggson112"); DefaultMutableTreeNode ggson113 = new DefaultMutableTreeNode( "ggson113"); gson11.add(ggson111); gson11.add(ggson112); gson11.add(ggson113); son1.add(gson11); son1.add(gson12); son2.add(gson21); son2.add(gson22); son3.add(gson31); son3.add(gson32); root.add(son1); root.add(son2); root.add(son3); JTree tree = new JTree(root); expandAll(tree, true); tree.setEnabled(isEnabled); this.add(tree, BorderLayout.CENTER); } private static void expandAll(JTree tree, boolean expand) { TreeNode root = (TreeNode) tree.getModel().getRoot(); // Traverse tree from root expandAll(tree, new TreePath(root), expand); } private static void expandAll(JTree tree, TreePath parent, boolean expand) { // Traverse children TreeNode node = (TreeNode) parent.getLastPathComponent(); if (node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements();) { TreeNode n = (TreeNode) e.nextElement(); TreePath path = parent.pathByAddingChild(n); expandAll(tree, path, expand); } } // Expansion or collapse must be done bottom-up if (expand) { tree.expandPath(parent); } else { tree.collapsePath(parent); } } } public DecorationTrees() { super("Trees in decoration areas"); JPanel treePanel = new JPanel(new GridLayout(2, 4)); treePanel.add(new TreePanel("Enabled in HEADER", DecorationAreaType.HEADER, true)); treePanel.add(new TreePanel("Disabled in HEADER", DecorationAreaType.HEADER, false)); treePanel.add(new TreePanel("Enabled in NONE", DecorationAreaType.NONE, true)); treePanel.add(new TreePanel("Disabled in NONE", DecorationAreaType.NONE, false)); treePanel.add(new TreePanel("Enabled in GENERAL", DecorationAreaType.GENERAL, true)); treePanel.add(new TreePanel("Disabled in GENERAL", DecorationAreaType.GENERAL, false)); treePanel.add(new TreePanel("Enabled in FOOTER", DecorationAreaType.FOOTER, true)); treePanel.add(new TreePanel("Disabled in FOOTER", DecorationAreaType.FOOTER, false)); this.setLayout(new BorderLayout()); this.add(treePanel, BorderLayout.CENTER); JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); controlPanel.add(new SubstanceSkinComboSelector()); this.add(controlPanel, BorderLayout.SOUTH); this.setSize(500, 400); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); SwingUtilities.invokeLater(new Runnable() { public void run() { SubstanceLookAndFeel.setSkin(new MistSilverSkin()); new DecorationTrees().setVisible(true); } }); } }