All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.homebeaver.swingset.demo.DemoAction Maven / Gradle / Ivy

package io.github.homebeaver.swingset.demo;

import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.logging.Logger;

import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;

import org.jdesktop.swingx.JXFrame.StartPosition;
import org.jdesktop.swingx.action.AbstractActionExt;
import org.jdesktop.swingx.demos.errorpane.ErrorPaneDemo;
import org.jdesktop.swingx.demos.tree.XTreeDemo;
import org.jdesktop.swingx.icon.PauseIcon;
import org.jdesktop.swingx.icon.PlayIconSolid;
import org.jdesktop.swingx.icon.RadianceIcon;
import org.jdesktop.swingx.icon.StopIcon;

import swingset.AbstractDemo;
import swingset.ButtonDemo;
import swingset.ColorChooserDemo;
import swingset.ComboBoxDemo;
import swingset.FileChooserDemo;
import swingset.HtmlDemo;
import swingset.InternalFrameDemo;
import swingset.ListDemo;
import swingset.ProgressBarDemo;
import swingset.ScrollPaneDemo;
import swingset.SliderDemo;
import swingset.SplitPaneDemo;
import swingset.StaticUtilities;
import swingset.TabbedPaneDemo;
import swingset.TableDemo;
import swingset.TextAndMnemonicUtils;
import swingset.ToolTipDemo;

/**
 * DemoAction extends AbstractActionExt which includes toggle or group states.
 * 

* It implements Action and ItemListener interface. * * Each DemoAction represents a demo, either SwingSet2 or SwingSet3 demo, * which can be loaded and started in an extra frame. */ // interface ItemListener extends EventListener // class AbstractActionExt extends AbstractAction implements ItemListener public class DemoAction extends AbstractActionExt { private static final Logger LOG = Logger.getLogger(DemoAction.class.getName()); /** A Category of Demos */ public enum Category { CHOOSERS, CONTAINERS, CONTROLS, DATA, DECORATORS, FUNCTIONALITY, GRAPHICS, TEXT, VISUALIZATION}; // category => color @SuppressWarnings("serial") public static Map categoryToColor = new HashMap() {{ put(Category.CHOOSERS, Color.CYAN); put(Category.CONTAINERS, Color.PINK); // examples: ss3:JXCollapsiblePane put(Category.CONTROLS, Color.RED); // examples: ButtonDemo/ss2, ss3:JXDatePicker, LoginPaneDemo put(Category.DATA, Color.BLUE); // examples: TableDemo/ss2, ss3:XTableDemo, XTreeDemo put(Category.DECORATORS, Color.MAGENTA); // examples: ProgressBarDemo/ss2 ss3:JXBusyLabel put(Category.FUNCTIONALITY, Color.YELLOW); // examples: ss3:SearchDemo put(Category.GRAPHICS, Color.ORANGE); // examples: ss3:BlendComposite put(Category.TEXT, Color.GREEN); put(Category.VISUALIZATION, Color.GRAY); }}; /** * get SmallIcon for swingSetVersion,color * @param ssv swingSetVersion * @param color Color of the icon * @return Icon */ // swingSetVersion,color => smallIcon public static Icon getSmallIcon(int ssv, Color color) { RadianceIcon icon; if(ssv==2) { icon = StopIcon.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); icon.setColorFilter(iconColor -> color); return icon; } if(ssv==3) { icon = PlayIconSolid.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); icon.setColorFilter(iconColor -> color); return icon; } icon = PauseIcon.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); icon.setColorFilter(iconColor -> color); return icon; } /** * get SmallIcon for swingSetVersion,category * @param ssv swingSetVersion * @param category demo Category * @return Icon */ // swingSetVersion,category => smallIcon public static Icon getSmallIcon(int ssv, Category category) { RadianceIcon icon; if(ssv==2) { icon = StopIcon.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); icon.setColorFilter(iconColor -> categoryToColor.get(category)); return icon; } if(ssv==3) { icon = PlayIconSolid.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); icon.setColorFilter(iconColor -> categoryToColor.get(category)); return icon; } icon = PauseIcon.of(RadianceIcon.SMALL_ICON, RadianceIcon.SMALL_ICON); return icon; } Class democlass = null; String className = null; AbstractButton jToggleButton = null; Category category = null; /* super (AbstractActionExt) ctors: public AbstractActionExt() // default public AbstractActionExt(AbstractActionExt action) // copy ctor public AbstractActionExt(String name) // with label public AbstractActionExt(String name, Icon icon) // with label and smallIcon public AbstractActionExt(String name, String command) // with label and command public AbstractActionExt(String name, String command, Icon icon) // label, command and smallIcon */ /** * Creates an {@code DemoAction} with the specified name/Value({@code Action.NAME}) and icons. * * @param className full className * @param name the name ({@code Action.NAME}) for the action; a value of {@code null} is ignored * @param smallIcon the icon ({@code Action.SMALL_ICON}) for the action; a value of {@code null} is ignored * @param icon the large icon ({@code Action.LARGE_ICON_KEY}) for the action; a value of {@code null} is ignored */ public DemoAction(String className, String name, Icon smallIcon, Icon icon) { super(name, smallIcon); this.className = className; if(icon!=null) super.setLargeIcon(icon); } /** * ctor * @param className String * @param name String * @param icon Icon */ public DemoAction(String className, String name, Icon icon) { this(className, name, null, icon); } /** * ctor * @param className String * @param name String */ public DemoAction(String className, String name) { this(className, name, null, null); } /** * ctor * @param className String * @param name String * @param ssv swingSetVersion * @param cat Action Category */ public DemoAction(String className, String name, int ssv, Category cat) { this(className, name, getSmallIcon(ssv, cat), null); this.category = cat; } /** * ctor * @param className String * @param name String * @param ssv swingSetVersion * @param cat Action Category * @param icon Icon */ public DemoAction(String className, String name, int ssv, Category cat, Icon icon) { this(className, name, getSmallIcon(ssv, cat), icon); this.category = cat; } /** * Creates an {@code DemoAction} with the specified name/Value({@code Action.NAME}) and icons. * * @param democlass the demo class * @param name the name ({@code Action.NAME}) for the action; a value of {@code null} is ignored * @param smallIcon the icon ({@code Action.SMALL_ICON}) for the action; a value of {@code null} is ignored * @param icon the large icon ({@code Action.LARGE_ICON_KEY}) for the action; a value of {@code null} is ignored */ public DemoAction(Class democlass, String name, Icon smallIcon, Icon icon) { super(name, smallIcon); this.democlass = democlass; if(icon!=null) super.setLargeIcon(icon); // SHORT_DESCRIPTION will setToolTipText in addActionToToolBar if(this.democlass!=null) { String key = this.democlass.getSimpleName() + '.' + "tooltip"; // TODO use AbstractDemo.getBundleString(String key, String fallback) ! getBundleString not static String desc = null; try { // getTextAndMnemonicString throws MissingResourceException desc = TextAndMnemonicUtils.getTextAndMnemonicString(key); } catch (MissingResourceException e) { desc = null; } super.setShortDescription(desc); } } /** * convenience ctor * @param democlass the demo class * @param name the name ({@code Action.NAME}) for the action * @param icon the large icon */ public DemoAction(Class democlass, String name, Icon icon) { this(democlass, name, null, icon); } /** * convenience ctor * @param democlass the demo class * @param name the name ({@code Action.NAME}) for the action */ public DemoAction(Class democlass, String name) { this(democlass, name, null, null); } /** * convenience ctor with swingSetVersion and demo Category * @param democlass the demo class * @param name the name ({@code Action.NAME}) for the action * @param ssv swingSetVersion * @param cat demo Category */ public DemoAction(Class democlass, String name, int ssv, Category cat) { this(democlass, name, getSmallIcon(ssv, cat), null); this.category = cat; } /** * convenience ctor with swingSetVersion, demo Category and large icon * @param democlass the demo class * @param name the name ({@code Action.NAME}) for the action * @param ssv swingSetVersion * @param cat demo Category * @param icon the large icon */ public DemoAction(Class democlass, String name, int ssv, Category cat, Icon icon) { this(democlass, name, getSmallIcon(ssv, cat), icon); this.category = cat; } private static DemoAction root = null; private static DemoAction ss2 = null; private static DemoAction ss3 = null; /** * Returns Root Action * @return DemoAction */ public static DemoAction getRootAction() { if(root==null) { root = new DemoAction((String)null, "Demo"); } return root; } /** * get SwingSet2 Action * @return DemoAction */ public static DemoAction getSS2Action() { if(ss2==null) { ss2 = new DemoAction((String)null, "SwingSet2", 2, null, null); } return ss2; } /** * get SwingSet3 Action * @return DemoAction */ public static DemoAction getSS3Action() { if(ss3==null) { ss3 = new DemoAction((String)null, "SwingSet3", 3, null, null); } return ss3; } private static ArrayList ss2Actions = null; private static ArrayList ss3Actions = null; /** * get List of SwingSet2 Actions * @return List */ public static ArrayList getSS2Actions() { if(ss2Actions==null) { ss2Actions = new ArrayList(); ss2Actions.add(new DemoAction(InternalFrameDemo.class, "InternalFrame", 2, Category.CONTAINERS, StaticUtilities.createImageIcon(InternalFrameDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ButtonDemo.class, "Button", 2, Category.CONTROLS, StaticUtilities.createImageIcon(ButtonDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ComboBoxDemo.class, "ComboBox", 2, Category.CONTAINERS, StaticUtilities.createImageIcon(ComboBoxDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ColorChooserDemo.class, "ColorChooser", 2, Category.CHOOSERS, StaticUtilities.createImageIcon(ColorChooserDemo.ICON_PATH))); ss2Actions.add(new DemoAction(FileChooserDemo.class, "FileChooser", 2, Category.CHOOSERS, StaticUtilities.createImageIcon(FileChooserDemo.ICON_PATH))); ss2Actions.add(new DemoAction(HtmlDemo.class, "Html", 2, Category.TEXT, StaticUtilities.createImageIcon(HtmlDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ListDemo.class, "List", 2, Category.DATA, StaticUtilities.createImageIcon(ListDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ErrorPaneDemo.class, "Error+OptionPane", 3, Category.CONTROLS, StaticUtilities.createImageIcon(ErrorPaneDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ProgressBarDemo.class, "ProgressBar", 2, Category.DECORATORS, StaticUtilities.createImageIcon(ProgressBarDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ScrollPaneDemo.class, "ScrollPane", 2, Category.DECORATORS, StaticUtilities.createImageIcon(ScrollPaneDemo.ICON_PATH))); ss2Actions.add(new DemoAction(SliderDemo.class, "Slider", 2, Category.DECORATORS, StaticUtilities.createImageIcon(SliderDemo.ICON_PATH))); ss2Actions.add(new DemoAction(SplitPaneDemo.class, "SplitPane", 2, Category.CONTAINERS, StaticUtilities.createImageIcon(SplitPaneDemo.ICON_PATH))); ss2Actions.add(new DemoAction(TabbedPaneDemo.class, "TabbedPane", 2, Category.CONTAINERS, StaticUtilities.createImageIcon(TabbedPaneDemo.ICON_PATH))); ss2Actions.add(new DemoAction(TableDemo.class, "Table", 2, Category.DATA, StaticUtilities.createImageIcon(TableDemo.ICON_PATH))); ss2Actions.add(new DemoAction(ToolTipDemo.class, "ToolTip", 2, Category.DECORATORS, StaticUtilities.createImageIcon(ToolTipDemo.ICON_PATH))); ss2Actions.add(new DemoAction(XTreeDemo.class, "Tree", 3, Category.DATA, StaticUtilities.createImageIcon(XTreeDemo.ICON_PATH))); } return ss2Actions; } /** * get List of SwingSet3 Actions * @return List */ public static ArrayList getSS3Actions() { if(ss3Actions==null) { ss3Actions = new ArrayList(); // category FUNCTIONALITY 4/5 (Autocomplete is DECORATOR): ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.search.SearchDemo", "Search", 3, Category.FUNCTIONALITY)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.highlighter.HighlighterDemo", "Highlighter", 3, Category.FUNCTIONALITY)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.highlighterext.HighlighterExtDemo", "Highlighter (extended)", 3, Category.FUNCTIONALITY)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.prompt.PromptSupportDemo", "PromptSupport", 3, Category.FUNCTIONALITY)); // category CONTROLS 10/10: ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.errorpane.ErrorPaneDemo", "ErrorPane", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.imageview.ImageViewDemo", "ImageView", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.hyperlink.HyperlinkDemo", "Hyperlink", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.loginpane.LoginToDBPaneDemo", "LoginToDBPane", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.loginpane.LoginPaneDemo", "LoginPane", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.datepicker.DatePickerDemo", "JXDatePicker", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.monthview.MonthViewDemo", "JXMonthView (basic)", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.monthviewext.MonthViewExtDemo", "JXMonthView (extended)", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.xbutton.XButtonDemo", "JXButton", 3, Category.CONTROLS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.xlabel.XLabelDemo", "XLabel", 3, Category.CONTROLS)); // category DECORATORS 6/3: multithumbslider hierhin, da Slider auch in DECORATORS ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.autocomplete.AutoCompleteDemo", "AutoComplete", 3, Category.DECORATORS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.busylabel.BusyLabelDemo", "BusyLabel", 3, Category.DECORATORS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.titledseparator.TitledSeparatorDemo", "JXTitledSeparator", 3, Category.DECORATORS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.painter.PainterDemo", "Painter", 3, Category.DECORATORS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.multithumbslider.MultiThumbSliderDemo", "MultiThumbSlider", 3, Category.DECORATORS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.svg.MirroringIconDemo", "MirroringIcon", 3, Category.DECORATORS)); // category DATA 4/4: ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.xlist.XListDemo", "XList", 3, Category.DATA)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.table.XTableDemo", "XTable", 3, Category.DATA)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.tree.XTreeDemo", "XTree", 3, Category.DATA)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.treetable.TreeTableDemo", "XTreeTable", 3, Category.DATA)); // category CONTAINERS 6/6: ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.combobox.XComboBoxDemo", "JXComboBox", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.collapsiblepane.CollapsiblePaneDemo", "JXCollapsiblePane", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.taskpane.TaskPaneDemo", "TaskPane", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.multisplitpane.MultiSplitPaneDemo", "JXMultiSplitPane", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.xpanel.XPanelDemo", "XPanel", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.titledpanel.TitledPanelDemo", "JXTitledPanel", 3, Category.CONTAINERS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.tipoftheday.TipOfTheDayDemo", "JXTipOfTheDay", 3, Category.CONTAINERS)); // category GRAPHICS 1/1: ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.blendcomposite.BlendCompositeDemo", "BlendComposite", 3, Category.GRAPHICS)); ss3Actions.add(new DemoAction("org.jdesktop.swingx.demos.graph.GraphDemo", "JXGraph", 3, Category.GRAPHICS)); ss3Actions.add(new DemoAction("org.jxmapviewer.demos.MapViewerDemo", "JXMapViewer", 3, Category.GRAPHICS)); ss3Actions.add(new DemoAction("org.jxmapviewer.demos.MapKitDemo", "JXMapKit", 3, Category.GRAPHICS)); // TODO JXGraph is cat Visualization } return ss3Actions; } void setToggleButton(AbstractButton toggleButton) { jToggleButton = toggleButton; } AbstractButton getToggleButton() { return jToggleButton; } Category getCategory() { return category; } /* implement method public void actionPerformed(ActionEvent e) * defined in interface ActionListener extends EventListener */ @Override public void actionPerformed(ActionEvent e) { if(democlass==null) { if(className==null) { // node ohne demo klasse, root, ss2, ss3, ... ==> nix tun return; } democlass = loadDemo(className); } MainJXframe rf = MainJXframe.getInstance(); // ss2: deselect all toolbar buttons except this action button JToolBar tb = rf.getToolBar(); Component[] cs = tb.getComponents(); for(int i=0;i loadDemo(String classname) { // setStatus("loading" + classname); Class demoClass = null; try { demoClass = Class.forName(classname); // throws ClassNotFoundException } catch (Exception e) { LOG.warning("Error occurred loading class: " + classname); e.printStackTrace(); } return demoClass; } private AbstractDemo getInstanceOf(Class demoClass, Frame frame, MainJXframe rf) throws NoSuchMethodException , SecurityException , InstantiationException , IllegalAccessException , IllegalArgumentException , InvocationTargetException { Constructor demoConstructor = demoClass.getConstructor(new Class[] { Frame.class }); // throws // NoSuchMethodException, // SecurityException AbstractDemo demo = (AbstractDemo) demoConstructor.newInstance(new Object[] { frame }); // demo.setLocale(rf.getLocale()); // das ist zu spät // LOG.info("------------- demo.Locale="+demo.getLocale()); return demo; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy