package test.check;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import org.pushingpixels.substance.api.DecorationAreaType;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import test.check.command.ClientPropertyCommand;
import test.check.command.ConfigurationCommand;
import test.check.command.CreationCommand;
import test.check.command.DisableCommand;
import test.check.command.DisableViewportCommand;
public class CellsPanel extends JPanel implements Deferrable {
private boolean isInitialized;
@Override
public boolean isInitialized() {
return this.isInitialized;
}
public CellsPanel() {
}
@Override
public synchronized void initialize() {
FormLayout lmCells = new FormLayout(
"right:pref, 10dlu, fill:pref:grow(1), 4dlu,"
+ "fill:pref:grow(1), 4dlu, fill:pref:grow(1), "
+ "4dlu, fill:pref:grow(1)", "");
lmCells.setColumnGroups(new int[][] { { 3, 5, 7, 9 } });
DefaultFormBuilder builderCells = new DefaultFormBuilder(lmCells,
new ScrollablePanel());
builderCells.setDefaultDialogBorder();
builderCells.append("");
builderCells.append(new JLabel("NONE"), new JLabel("GENERAL"));
builderCells.append(new JLabel("HEADER"), new JLabel("FOOTER"));
builderCells.appendSeparator("Lists");
addControlRow(builderCells, "List", new CreationCommand<Component>() {
public Component create() {
JList list = new JList(new Object[] { "entry1", "entry2",
"entry3" });
return list;
}
}, null);
addControlRow(builderCells, "List watermark",
new CreationCommand<Component>() {
public Component create() {
JList list = new JList(new Object[] { "entry1",
"entry2", "entry3" });
return list;
}
}, new ClientPropertyCommand(
SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE));
addControlRow(builderCells, "List disabled",
new CreationCommand<Component>() {
public Component create() {
JList list = new JList(new Object[] { "entry1",
"entry2", "entry3" });
return list;
}
}, new DisableCommand());
CreationCommand<Component> tableCreationCmd = new CreationCommand<Component>() {
public Component create() {
final JTable table = new JTable(new Object[][] {
{ "entry11", "entry12", "entry13" },
{ "entry21", "entry22", "entry23" },
{ "entry31", "entry32", "entry33" } }, new Object[] {
"Column1", "Column2", "Column3" });
table.setName("Table ");
JScrollPane tableScroll = new JScrollPane(table) {
@Override
public void setBackground(Color bg) {
super.setBackground(bg);
table.setBackground(bg);
table.getTableHeader().setBackground(bg);
}
@Override
public void setForeground(Color fg) {
super.setForeground(fg);
table.setForeground(fg);
table.getTableHeader().setForeground(fg);
}
};
Dimension prefTable = table.getPreferredSize();
tableScroll.setPreferredSize(new Dimension(prefTable.width,
prefTable.height + 25));
return tableScroll;
}
};
builderCells.appendSeparator("Tables");
addControlRow(builderCells, "Table", tableCreationCmd, null);
addControlRow(builderCells, "Table watermark", tableCreationCmd,
new ClientPropertyCommand(
SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE));
addControlRow(builderCells, "Table disabled", tableCreationCmd,
new DisableViewportCommand());
CreationCommand<Component> treeCreationCmd = new CreationCommand<Component>() {
public void expandAll(JTree tree, boolean expand) {
TreeNode root = (TreeNode) tree.getModel().getRoot();
// Traverse tree from root
expandAll(tree, new TreePath(root), expand);
}
private 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 Component create() {
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);
return tree;
}
};
builderCells.appendSeparator("Trees");
addControlRow(builderCells, "Tree", treeCreationCmd, null);
addControlRow(builderCells, "Tree watermark", treeCreationCmd,
new ClientPropertyCommand(
SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE));
addControlRow(builderCells, "Tree disabled", treeCreationCmd,
new DisableCommand());
JPanel panelCells = builderCells.getPanel();
JScrollPane jspCells = new JScrollPane(panelCells);
panelCells.setOpaque(false);
jspCells.setOpaque(false);
jspCells.getViewport().setOpaque(false);
this.setLayout(new BorderLayout());
this.add(jspCells);
this.isInitialized = true;
}
/**
* Adds a row of components configured with the specified configuration
* command.
*
* @param builder
* Form builder.
* @param label
* Text to set.
* @param creationCmd
* Creation command.
* @param configurationCmd
* Configuration command to apply.
*/
private void addControlRow(DefaultFormBuilder builder, String label,
CreationCommand<Component> creationCmd,
ConfigurationCommand<Component> configurationCmd) {
Component[] row = new Component[4];
row[0] = creationCmd.create();
SubstanceLookAndFeel.setDecorationType(((JComponent) row[0]),
DecorationAreaType.NONE);
row[0].setName(row[0].getName() + ": NONE");
row[1] = creationCmd.create();
SubstanceLookAndFeel.setDecorationType(((JComponent) row[1]),
DecorationAreaType.GENERAL);
row[1].setName(row[1].getName() + ": GENERAL");
row[2] = creationCmd.create();
SubstanceLookAndFeel.setDecorationType(((JComponent) row[2]),
DecorationAreaType.HEADER);
row[2].setName(row[2].getName() + ": HEADER");
row[3] = creationCmd.create();
SubstanceLookAndFeel.setDecorationType(((JComponent) row[3]),
DecorationAreaType.FOOTER);
row[3].setName(row[3].getName() + ": FOOTER");
if (configurationCmd != null) {
for (Component comp : row) {
configurationCmd.configure(comp);
}
}
JLabel jl = new JLabel(label);
builder.append(jl);
for (Component comp : row)
builder.append(comp);
}
}