/* * Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of Substance Kirill Grouchnikov nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package test.check; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Rectangle; import java.text.DecimalFormat; import java.util.Enumeration; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComboBox; import javax.swing.JDesktopPane; import javax.swing.JEditorPane; import javax.swing.JFormattedTextField; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JProgressBar; import javax.swing.JRadioButton; import javax.swing.JRadioButtonMenuItem; import javax.swing.JScrollPane; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.JToggleButton; import javax.swing.JTree; import javax.swing.SpinnerListModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import org.pushingpixels.substance.api.SubstanceLookAndFeel; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; import test.Check; import test.check.command.BackgroundColorCommand; import test.check.command.ChainCommand; 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; import test.check.command.ForegroundColorCommand; import test.check.command.MinimizeInternalFrameCommand; import test.check.command.SelectCommand; import test.check.command.SetBoundsCommand; /** * Test application panel for testing colorized components. * * @author Kirill Grouchnikov */ public class ColorizedControlsPanel extends JPanel implements Deferrable { /** * The default button. */ public JButton defaultButton; private boolean isInitialized; @Override public boolean isInitialized() { return this.isInitialized; } /** * Returns a row of buttons, consisting of {@link JButton}, * {@link JToggleButton}, {@link JCheckBox} and {@link JRadioButton} in * default states. * * @return A row of buttons, consisting of {@link JButton}, * {@link JToggleButton}, {@link JCheckBox} and {@link JRadioButton} * in default states. */ private AbstractButton[] getRow() { AbstractButton[] result = new AbstractButton[4]; result[0] = new JButton("sample"); result[1] = new JToggleButton("sample"); result[2] = new JCheckBox("sample"); result[3] = new JRadioButton("sample"); return result; } /** * Adds a row of buttons configured with the specified text, icon and * configuration command. * * @param builder * Form builder. * @param label * Text to set. * @param icon * Icon to set. * @param configurationCmd * Configuration command to apply. */ private void addButtonRow(DefaultFormBuilder builder, String label, Icon icon, ConfigurationCommand<Component> configurationCmd) { AbstractButton[] row = this.getRow(); if (configurationCmd != null) { for (AbstractButton ab : row) { configurationCmd.configure(ab); ab.setName(label + " " + ab.getClass().getSimpleName()); } } JLabel jl = new JLabel(label); if (icon != null) jl.setIcon(icon); builder.append(jl); for (AbstractButton ab : row) builder.append(ab); } /** * 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(); row[0].setBackground(Color.yellow); row[0].setName(row[0].getName() + ": yellow backgr"); row[1] = creationCmd.create(); row[1].setBackground(Color.blue); row[1].setForeground(Color.red); row[1].setName(row[1].getName() + ": blue backgr, red foregr"); row[2] = creationCmd.create(); row[2].setBackground(Color.green); row[2].setName(row[2].getName() + ": green backgr"); row[3] = creationCmd.create(); row[3].setBackground(Color.green.darker()); row[3].setName(row[3].getName() + ": darker green backgr"); 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); } private void addInternalFrame(JDesktopPane desktopPane, CreationCommand creationCommand, ConfigurationCommand<Component> configCommand) { JInternalFrame jif = (JInternalFrame) creationCommand.create(); desktopPane.add(jif); configCommand.configure(jif); } /** * Creates a new button panel. */ @SuppressWarnings("unchecked") public ColorizedControlsPanel() { this.setLayout(new BorderLayout()); } @Override public synchronized void initialize() { FormLayout lmButtons = new FormLayout( "right:pref, 10dlu, left:pref:grow(1), 4dlu," + "left:pref:grow(1), 4dlu, left:pref:grow(1), " + "4dlu, left:pref:grow(1)", ""); lmButtons.setColumnGroups(new int[][] { { 3, 5, 7, 9 } }); DefaultFormBuilder builderButtons = new DefaultFormBuilder(lmButtons, new ScrollablePanel()); builderButtons.setDefaultDialogBorder(); builderButtons.append(""); JLabel bLabel = new JLabel("Buttons"); bLabel.setIcon(Check.getIcon("JButtonColor16")); JLabel tbLabel = new JLabel("Toggle buttons"); tbLabel.setIcon(Check.getIcon("JToggleButtonColor16")); JLabel cbLabel = new JLabel("Check boxes"); cbLabel.setIcon(Check.getIcon("JCheckBoxColor16")); JLabel rbLabel = new JLabel("Radio buttons"); rbLabel.setIcon(Check.getIcon("JRadioButtonColor16")); builderButtons.append(bLabel, tbLabel); builderButtons.append(cbLabel, rbLabel); builderButtons.appendSeparator("Regular settings"); this.addButtonRow(builderButtons, "Enabled", null, null); this.addButtonRow(builderButtons, "Flat", null, new ClientPropertyCommand(SubstanceLookAndFeel.FLAT_PROPERTY, Boolean.TRUE)); this.addButtonRow(builderButtons, "Disabled", null, new DisableCommand()); this .addButtonRow(builderButtons, "Selected", null, new SelectCommand()); this.addButtonRow(builderButtons, "Disabled selected", null, new ChainCommand<Component>(new DisableCommand(), new SelectCommand())); builderButtons.appendSeparator("Background settings"); this.addButtonRow(builderButtons, "Yellow", null, new BackgroundColorCommand(Color.yellow)); this.addButtonRow(builderButtons, "Yellow flat", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new ClientPropertyCommand( SubstanceLookAndFeel.FLAT_PROPERTY, Boolean.TRUE))); this.addButtonRow(builderButtons, "Yellow disabled", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new DisableCommand())); this.addButtonRow(builderButtons, "Yellow selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new SelectCommand())); this.addButtonRow(builderButtons, "Yellow disabled selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Red", null, new BackgroundColorCommand(Color.red)); this.addButtonRow(builderButtons, "Red disabled", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.red), new DisableCommand())); this.addButtonRow(builderButtons, "Red selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.red), new SelectCommand())); this.addButtonRow(builderButtons, "Red disabled selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.red), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Green", null, new BackgroundColorCommand(Color.green)); this.addButtonRow(builderButtons, "Green disabled", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green), new DisableCommand())); this.addButtonRow(builderButtons, "Green selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green), new SelectCommand())); this .addButtonRow(builderButtons, "Green disabled selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Dark Green", null, new BackgroundColorCommand(Color.green.darker())); this.addButtonRow(builderButtons, "Dark Green disabled", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green.darker()), new DisableCommand())); this.addButtonRow(builderButtons, "Dark Green selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green.darker()), new SelectCommand())); this.addButtonRow(builderButtons, "Dark Green disabled selected", null, new ChainCommand<Component>(new BackgroundColorCommand( Color.green.darker()), new SelectCommand(), new DisableCommand())); builderButtons.appendSeparator("Foreground settings"); this.addButtonRow(builderButtons, "Yellow", null, new ForegroundColorCommand(Color.yellow)); this.addButtonRow(builderButtons, "Yellow disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow), new DisableCommand())); this.addButtonRow(builderButtons, "Yellow selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow), new SelectCommand())); this.addButtonRow(builderButtons, "Yellow disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Red", null, new ForegroundColorCommand(Color.red)); this.addButtonRow(builderButtons, "Red disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new DisableCommand())); this.addButtonRow(builderButtons, "Red selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new SelectCommand())); this.addButtonRow(builderButtons, "Red disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Green", null, new ForegroundColorCommand(Color.green)); this.addButtonRow(builderButtons, "Green disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green), new DisableCommand())); this.addButtonRow(builderButtons, "Green selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green), new SelectCommand())); this .addButtonRow(builderButtons, "Green disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Dark Green", null, new ForegroundColorCommand(Color.green.darker())); this.addButtonRow(builderButtons, "Dark Green disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new DisableCommand())); this.addButtonRow(builderButtons, "Dark Green selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new SelectCommand())); this.addButtonRow(builderButtons, "Dark Green disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new SelectCommand(), new DisableCommand())); builderButtons.appendSeparator("Combined settings"); this.addButtonRow(builderButtons, "Blue/yellow", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.blue), new BackgroundColorCommand(Color.yellow))); this.addButtonRow(builderButtons, "Blue/yellow disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.blue), new BackgroundColorCommand(Color.yellow), new DisableCommand())); this.addButtonRow(builderButtons, "Blue/yellow selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.blue), new BackgroundColorCommand(Color.yellow), new SelectCommand())); this.addButtonRow(builderButtons, "Blue/yellow disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.blue), new BackgroundColorCommand(Color.yellow), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Red/light green", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new BackgroundColorCommand(Color.green .brighter()))); this.addButtonRow(builderButtons, "Red/light green disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new BackgroundColorCommand(Color.green .brighter()), new DisableCommand())); this.addButtonRow(builderButtons, "Red/light green selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new BackgroundColorCommand(Color.green .brighter()), new SelectCommand())); this .addButtonRow(builderButtons, "Red/light green disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.red), new BackgroundColorCommand( Color.green.brighter()), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Dark yellow/blue", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow.darker()), new BackgroundColorCommand( Color.blue))); this.addButtonRow(builderButtons, "Dark yellow/blue disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow.darker()), new BackgroundColorCommand( Color.blue), new DisableCommand())); this.addButtonRow(builderButtons, "Dark yellow/blue selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow.darker()), new BackgroundColorCommand( Color.blue), new SelectCommand())); this .addButtonRow(builderButtons, "Dark yellow/blue disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.yellow.darker()), new BackgroundColorCommand(Color.blue), new SelectCommand(), new DisableCommand())); this.addButtonRow(builderButtons, "Dark green/magenta", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new BackgroundColorCommand( Color.magenta))); this.addButtonRow(builderButtons, "Dark green/magenta disabled", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new BackgroundColorCommand( Color.magenta), new DisableCommand())); this.addButtonRow(builderButtons, "Dark green/magenta selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new BackgroundColorCommand( Color.magenta), new SelectCommand())); this.addButtonRow(builderButtons, "Dark green/magenta disabled selected", null, new ChainCommand<Component>(new ForegroundColorCommand( Color.green.darker()), new BackgroundColorCommand( Color.magenta), new SelectCommand(), new DisableCommand())); JPanel panelButtons = builderButtons.getPanel(); JScrollPane jspButtons = new JScrollPane(panelButtons); panelButtons.setOpaque(false); jspButtons.setOpaque(false); jspButtons.getViewport().setOpaque(false); FormLayout lmOther = new FormLayout( "right:pref, 10dlu, left:pref:grow(1), 4dlu," + "left:pref:grow(1), 4dlu, left:pref:grow(1), " + "4dlu, left:pref:grow(1)", ""); lmOther.setColumnGroups(new int[][] { { 3, 5, 7, 9 } }); DefaultFormBuilder builderOther = new DefaultFormBuilder(lmOther, new ScrollablePanel()); builderOther.setDefaultDialogBorder(); builderOther.append(""); builderOther.append(new JLabel("Yellow"), new JLabel( "Blue + red foreground")); builderOther.append(new JLabel("Green"), new JLabel("Dark green")); builderOther.appendSeparator("Labels"); addControlRow(builderOther, "Regular", new CreationCommand<Component>() { public Component create() { return new JLabel("label"); } }, null); addControlRow(builderOther, "Disabled", new CreationCommand<Component>() { public Component create() { return new JLabel("label"); } }, new DisableCommand()); addControlRow(builderOther, "HTML", new CreationCommand<Component>() { public Component create() { return new JLabel( "<html>text <b>text</b> <font color='red'>text</font>"); } }, null); builderOther.appendSeparator("Sliders"); addControlRow(builderOther, "Regular", new CreationCommand<Component>() { public Component create() { return new JSlider(0, 100, 50); } }, null); addControlRow(builderOther, "Disabled", new CreationCommand<Component>() { public Component create() { return new JSlider(0, 100, 50); } }, new DisableCommand()); builderOther.appendSeparator("Progress bars"); addControlRow(builderOther, "Regular", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(false); jpb.setValue(50); jpb.setStringPainted(true); return jpb; } }, null); addControlRow(builderOther, "Disabled", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(false); jpb.setValue(50); jpb.setStringPainted(true); return jpb; } }, new DisableCommand()); addControlRow(builderOther, "Custom foreground", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(false); jpb.setValue(50); jpb.setStringPainted(true); return jpb; } }, new ForegroundColorCommand(Color.red)); addControlRow(builderOther, "Disabled with foreground", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(false); jpb.setValue(50); jpb.setStringPainted(true); return jpb; } }, new ChainCommand<Component>(new DisableCommand(), new ForegroundColorCommand(Color.red))); addControlRow(builderOther, "Indeterminate", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(true); return jpb; } }, null); addControlRow(builderOther, "Indeterminate disabled", new CreationCommand<Component>() { public Component create() { JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(true); return jpb; } }, new DisableCommand()); builderOther.appendSeparator("Combo boxes"); addControlRow(builderOther, "Regular", new CreationCommand<Component>() { public Component create() { JComboBox jcb = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); return jcb; } }, null); addControlRow(builderOther, "Flat", new CreationCommand<Component>() { public Component create() { JComboBox jcb = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); return jcb; } }, new ClientPropertyCommand(SubstanceLookAndFeel.FLAT_PROPERTY, Boolean.TRUE)); addControlRow(builderOther, "Disabled", new CreationCommand<Component>() { public Component create() { JComboBox jcb = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); return jcb; } }, new DisableCommand()); addControlRow(builderOther, "Editable", new CreationCommand<Component>() { public Component create() { JComboBox jcb = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); jcb.setEditable(true); return jcb; } }, null); addControlRow(builderOther, "Disabled editable", new CreationCommand<Component>() { public Component create() { JComboBox jcb = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); jcb.setEditable(true); return jcb; } }, new DisableCommand()); CreationCommand<Component> spinnerCreationCmd = new CreationCommand<Component>() { public Component create() { JSpinner s = new JSpinner(new SpinnerListModel(new Object[] { "sample0", "sample", "sample2" })); s.getModel().setValue("sample"); return s; } }; builderOther.appendSeparator("Spinners"); addControlRow(builderOther, "Regular", spinnerCreationCmd, null); addControlRow(builderOther, "Flat", spinnerCreationCmd, new ClientPropertyCommand(SubstanceLookAndFeel.FLAT_PROPERTY, Boolean.TRUE)); addControlRow(builderOther, "Disabled", spinnerCreationCmd, new DisableCommand()); JPanel panelOther = builderOther.getPanel(); JScrollPane jspOther = new JScrollPane(panelOther); panelOther.setOpaque(false); jspOther.setOpaque(false); jspOther.getViewport().setOpaque(false); FormLayout lmText = new FormLayout( "right:pref, 10dlu, left:pref:grow(1), 4dlu," + "left:pref:grow(1), 4dlu, left:pref:grow(1), " + "4dlu, left:pref:grow(1)", ""); lmText.setColumnGroups(new int[][] { { 3, 5, 7, 9 } }); DefaultFormBuilder builderText = new DefaultFormBuilder(lmText, new ScrollablePanel()); builderText.setDefaultDialogBorder(); builderText.append(""); builderText.append(new JLabel("Yellow"), new JLabel( "Blue + red foreground")); builderText.append(new JLabel("Green"), new JLabel("Dark green")); builderText.appendSeparator("Text fields"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JTextField field = new JTextField("test", 15); return field; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JTextField field = new JTextField("test", 15); return field; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JTextField field = new JTextField("test", 15); return field; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JTextField field = new JTextField("test", 15); field.setEditable(false); return field; } }, null); builderText.appendSeparator("Formatted text fields"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JFormattedTextField field = new JFormattedTextField( new DecimalFormat("#,##0.0000")); field.setText("2,430.0000"); return field; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JFormattedTextField field = new JFormattedTextField( new DecimalFormat("#,##0.0000")); field.setText("2,430.0000"); return field; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JFormattedTextField field = new JFormattedTextField( new DecimalFormat("#,##0.0000")); field.setText("2,430.0000"); return field; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JFormattedTextField field = new JFormattedTextField( new DecimalFormat("#,##0.0000")); field.setText("2,430.0000"); field.setEditable(false); return field; } }, null); builderText.appendSeparator("Password fields"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JPasswordField field = new JPasswordField("password", 15); return field; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JPasswordField field = new JPasswordField("password", 15); return field; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JPasswordField field = new JPasswordField("password", 15); return field; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JPasswordField field = new JPasswordField("password", 15); field.setEditable(false); return field; } }, null); builderText.appendSeparator("Editor panes"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JEditorPane pane = new JEditorPane("text/html;", "Sample <b>content</b><br> <u>text</u>"); return pane; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JEditorPane pane = new JEditorPane("text/html;", "Sample <b>content</b><br> <u>text</u>"); return pane; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JEditorPane pane = new JEditorPane("text/html;", "Sample <b>content</b><br> <u>text</u>"); return pane; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JEditorPane pane = new JEditorPane("text/html;", "Sample <b>content</b><br> <u>text</u>"); pane.setEditable(false); return pane; } }, null); builderText.appendSeparator("Text areas"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JTextArea area = new JTextArea("Sample content text", 3, 15); return area; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JTextArea area = new JTextArea("Sample content text", 3, 15); return area; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JTextArea area = new JTextArea("Sample content text", 3, 15); return area; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JTextArea area = new JTextArea("Sample content text", 3, 15); area.setEditable(false); return area; } }, null); builderText.appendSeparator("Text panes"); addControlRow(builderText, "Regular", new CreationCommand<Component>() { public Component create() { JTextPane pane = new JTextPane(); pane.replaceSelection("Sample content text"); pane.setPreferredSize(new Dimension(120, 40)); return pane; } }, null); addControlRow(builderText, "Watermark", new CreationCommand<Component>() { public Component create() { JTextPane pane = new JTextPane(); pane.replaceSelection("Sample content text"); pane.setPreferredSize(new Dimension(120, 40)); return pane; } }, new ClientPropertyCommand( SubstanceLookAndFeel.WATERMARK_VISIBLE, Boolean.TRUE)); addControlRow(builderText, "Disabled", new CreationCommand<Component>() { public Component create() { JTextPane pane = new JTextPane(); pane.replaceSelection("Sample content text"); pane.setPreferredSize(new Dimension(120, 40)); return pane; } }, new DisableCommand()); addControlRow(builderText, "Not editable", new CreationCommand<Component>() { public Component create() { JTextPane pane = new JTextPane(); pane.replaceSelection("Sample content text"); pane.setPreferredSize(new Dimension(120, 40)); pane.setEditable(false); return pane; } }, null); JPanel panelText = builderText.getPanel(); JScrollPane jspText = new JScrollPane(panelText); panelText.setOpaque(false); jspText.setOpaque(false); jspText.getViewport().setOpaque(false); JScrollPane coloredScrollPane = new JScrollPane(new CheckeredPanel()); coloredScrollPane.setBackground(Color.yellow); coloredScrollPane.getVerticalScrollBar().setBackground(Color.green); 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("Yellow"), new JLabel( "Blue + red foreground")); builderCells.append(new JLabel("Green"), new JLabel("Dark green")); 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); JDesktopPane desktopPane = new JDesktopPane(); CreationCommand<Component> internalFrameCreationCmd = new CreationCommand<Component>() { public Component create() { JInternalFrame jif = new JInternalFrame("Internal frame"); jif.setLayout(new FlowLayout()); JButton button = new JButton("red button"); button.setBackground(Color.red); jif.add(button); jif.setClosable(true); jif.setMaximizable(true); jif.setIconifiable(true); jif.setResizable(true); jif.setVisible(true); JMenuBar jmb = new JMenuBar(); JMenu coloredMenu = new JMenu("Colors"); coloredMenu.setMnemonic('0'); JMenuItem coloredMI = new JMenuItem("Italic red"); coloredMI.setFont(coloredMI.getFont().deriveFont(Font.ITALIC)); coloredMI.setForeground(Color.red); coloredMI.setBackground(Color.yellow); coloredMenu.add(coloredMI); JRadioButtonMenuItem coloredRBMI = new JRadioButtonMenuItem( "Bold green"); coloredRBMI .setFont(coloredRBMI.getFont().deriveFont(Font.BOLD)); coloredRBMI.setForeground(Color.green); coloredRBMI.setBackground(Color.blue.brighter()); coloredMenu.add(coloredRBMI); JCheckBoxMenuItem coloredCBMI = new JCheckBoxMenuItem( "Big blue"); coloredCBMI.setFont(coloredCBMI.getFont().deriveFont(32f)); coloredCBMI.setForeground(Color.blue); coloredCBMI.setBackground(Color.green.brighter()); coloredMenu.add(coloredCBMI); JMenu coloredM = new JMenu("Always big magenta"); coloredM.setForeground(Color.magenta); coloredM.setBackground(Color.red.darker()); coloredM.setFont(coloredM.getFont().deriveFont(24f)); coloredMenu.add(coloredM); jmb.add(coloredMenu); JMenu blueMenu = new JMenu("Blue"); blueMenu.setForeground(Color.blue); blueMenu.setBackground(Color.yellow); jmb.add(blueMenu); jif.setJMenuBar(jmb); return jif; } }; addInternalFrame(desktopPane, internalFrameCreationCmd, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new SetBoundsCommand(new Rectangle(0, 0, 200, 100)))); addInternalFrame(desktopPane, internalFrameCreationCmd, new ChainCommand<Component>(new BackgroundColorCommand( Color.green), new SetBoundsCommand(new Rectangle(250, 0, 200, 100)))); addInternalFrame(desktopPane, internalFrameCreationCmd, new ChainCommand<Component>(new BackgroundColorCommand( Color.yellow), new SetBoundsCommand(new Rectangle(0, 150, 200, 100)), new MinimizeInternalFrameCommand())); addInternalFrame(desktopPane, internalFrameCreationCmd, new ChainCommand<Component>(new BackgroundColorCommand( Color.green), new SetBoundsCommand(new Rectangle(250, 150, 200, 100)), new MinimizeInternalFrameCommand())); desktopPane.setBackground(Color.blue); final JTabbedPane tabbed = new JTabbedPane(); tabbed.addTab("Buttons", jspButtons); tabbed.addTab("Text", jspText); tabbed.addTab("Scroll", coloredScrollPane); tabbed.addTab("Cells", jspCells); tabbed.addTab("Desktop", desktopPane); tabbed.addTab("Other", jspOther); tabbed.addTab("Yellow / Magenta", new JPanel()); tabbed.setBackgroundAt(tabbed.getTabCount() - 1, Color.yellow); tabbed.setForegroundAt(tabbed.getTabCount() - 1, Color.magenta); tabbed.addTab("Green / Blue", new JPanel()); tabbed.setBackgroundAt(tabbed.getTabCount() - 1, Color.green); tabbed.setForegroundAt(tabbed.getTabCount() - 1, Color.blue); tabbed.addTab("Dark Green", new JPanel()); tabbed.setBackgroundAt(tabbed.getTabCount() - 1, Color.green.darker()); tabbed.addTab("Disabled Green / Red", new JPanel()); tabbed.setBackgroundAt(tabbed.getTabCount() - 1, Color.green); tabbed.setForegroundAt(tabbed.getTabCount() - 1, Color.red.darker()); tabbed.setEnabledAt(tabbed.getTabCount() - 1, false); this.add(tabbed, BorderLayout.CENTER); JPanel controls = new JPanel(new FlowLayout(FlowLayout.LEFT)); final JSlider colorizationSlider = new JSlider(0, 100, 50); this.putClientProperty(SubstanceLookAndFeel.COLORIZATION_FACTOR, 0.5); colorizationSlider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { double val = colorizationSlider.getValue() / 100.0; ColorizedControlsPanel.this.putClientProperty( SubstanceLookAndFeel.COLORIZATION_FACTOR, new Double( val)); tabbed.repaint(); } }); controls.add(colorizationSlider); this.add(controls, BorderLayout.NORTH); this.isInitialized = true; } }