SwingXDemo.java
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:11k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. /*
  2.  * $Id: SwingXDemo.java,v 1.39 2005/09/29 14:46:49 kleopatra Exp $
  3.  *
  4.  * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
  5.  * Santa Clara, California 95054, U.S.A. All rights reserved.
  6.  */
  7. package org.jdesktop.demo.swingx;
  8. import java.awt.BorderLayout;
  9. import java.awt.event.ActionEvent;
  10. import java.io.File;
  11. import java.net.URL;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import javax.swing.AbstractAction;
  15. import javax.swing.AbstractListModel;
  16. import javax.swing.Action;
  17. import javax.swing.BorderFactory;
  18. import javax.swing.JComponent;
  19. import javax.swing.JEditorPane;
  20. import javax.swing.JMenu;
  21. import javax.swing.JMenuBar;
  22. import javax.swing.JScrollPane;
  23. import javax.swing.JSplitPane;
  24. import javax.swing.SwingUtilities;
  25. import javax.swing.UIManager;
  26. import javax.swing.event.HyperlinkEvent;
  27. import javax.swing.event.HyperlinkListener;
  28. import javax.swing.event.ListSelectionEvent;
  29. import javax.swing.event.ListSelectionListener;
  30. import javax.swing.plaf.basic.BasicSplitPaneUI;
  31. import org.jdesktop.demo.DemoPanel;
  32. import org.jdesktop.demo.MainWindow;
  33. import org.jdesktop.demo.swingx.common.FramedEditorPaneLinkVisitor;
  34. import org.jdesktop.demo.swingx.common.MarginHighlighter;
  35. import org.jdesktop.swingx.JXEditorPane;
  36. import org.jdesktop.swingx.JXHyperlink;
  37. import org.jdesktop.swingx.JXList;
  38. import org.jdesktop.swingx.JXTitledPanel;
  39. import org.jdesktop.swingx.LinkModel;
  40. import org.jdesktop.swingx.SearchFactory;
  41. import org.jdesktop.swingx.action.ActionContainerFactory;
  42. import org.jdesktop.swingx.action.BoundAction;
  43. import org.jdesktop.swingx.action.LinkAction;
  44. import org.jdesktop.swingx.action.TargetableAction;
  45. import org.jdesktop.swingx.border.DropShadowBorder;
  46. import org.jdesktop.swingx.decorator.Highlighter;
  47. import org.jdesktop.swingx.decorator.HighlighterPipeline;
  48. import com.jgoodies.forms.factories.Borders;
  49. /**
  50.  * A JPanel that demonstrates the use of various SwingX components. Each
  51.  * SwingX Component is shown in its own independent panel, and the user
  52.  * can navigate between the different demos from a list.
  53.  *
  54.  * @author  Richard Bair
  55.  * @author Patrick Wright
  56.  * @author Jeanette Winzenburg
  57.  * 
  58.  */
  59. public class SwingXDemo extends DemoPanel {
  60.     
  61.     //  components
  62.     private JXTitledPanel descriptionContainer;
  63.     // convenience alias to descriptionContainer's content
  64.     private JXEditorPane descriptionPane;
  65.     private JXTitledPanel demoContainer;
  66.     private DropShadowBorder dsb = new DropShadowBorder(UIManager.getColor("Control"), 0, 8, .5f, 12, false, true, true, true);
  67.     
  68.     // controlling views and models
  69.     private JXList demoList;
  70.     /** A List of each component we're demonstrating--all of which are DemoPanel
  71.      * instances. */
  72.     private List<DemoPanel> demoPanels = new ArrayList<DemoPanel>();
  73.     private DemoPanel currentDemo = null;
  74.     private LinkAction readMoreLinkAction;
  75.  
  76.     /**
  77.      * Creates new form SwingXDemo
  78.      */
  79.     public SwingXDemo() {
  80.         demoPanels.add(new JXTableDemoPanel());
  81.         demoPanels.add(new DecoratorDemoPanel());
  82.         demoPanels.add(new JXTaskPaneDemoPanel());
  83.         demoPanels.add(new JXTipOfTheDayDemoPanel());
  84.         demoPanels.add(new JXHyperlinkDemoPanel());
  85.         demoPanels.add(new JXDatePickerDemoPanel());
  86.         demoPanels.add(new JXMonthViewDemoPanel());
  87.         demoPanels.add(new AutoCompleteDemoPanel());
  88.         demoPanels.add(new ActionDemoPanel());
  89.         demoPanels.add(new AuthenticationDemoPanel());
  90.         demoPanels.add(new JXErrorDialogDemoPanel());
  91.         demoPanels.add(new DropShadowBorderPanel());
  92.         demoPanels.add(new JXGlassBoxDemoPanel());
  93.         demoPanels.add(new JXPanelTranslucencyDemoPanel());
  94.         
  95.         initComponents();
  96.         configureComponents();
  97.         build();
  98.         bind();
  99.         bindMenuActions();
  100.         
  101.     }
  102.  
  103.  
  104.     public void useFindBar(boolean useFindBar) {
  105.         SearchFactory.getInstance().setUseFindBar(useFindBar);
  106.     }
  107.     
  108.     private void bindMenuActions() {
  109.         BoundAction findModeAction = new BoundAction("Incremental Search", "useFindBar");
  110.         findModeAction.setStateAction();
  111.         findModeAction.registerCallback(this, "useFindBar");
  112.         getActionMap().put("useFindBar", findModeAction);
  113.         
  114. //        TargetableAction findAction = new TargetableAction("Search", "find");
  115. //        getActionMap().put("triggerFind", findAction);
  116.     }
  117.     @Override
  118.     public void addMenuItems(JMenuBar menuBar) {
  119.         ActionContainerFactory factory = new ActionContainerFactory(null);
  120.         JMenu menu = new JMenu("Find");
  121.         menu.add(factory.createMenuItem(getActionMap().get("triggerFind")));
  122.         menu.add(factory.createMenuItem(getActionMap().get("useFindBar")));
  123.         menuBar.add(menu);
  124.     }
  125.     private void bind() {
  126.         demoList.setModel(new AbstractListModel() {
  127.             public int getSize() {
  128.                 return demoPanels.size();
  129.             }
  130.             
  131.             public Object getElementAt(int index) {
  132.                 return demoPanels.get(index).getName();
  133.             }
  134.         });
  135.         demoList.addListSelectionListener(new ListSelectionListener() {
  136.             public void valueChanged(ListSelectionEvent e) {
  137.              //   if (e.getValueIsAdjusting()) return;
  138.                 demoListValueChanged(e);
  139.             }
  140.             
  141.         });
  142.         descriptionPane.addHyperlinkListener(linkListener);    
  143.         readMoreLinkAction = createReadMoreLink();
  144.         descriptionContainer.addRightDecoration(new JXHyperlink(readMoreLinkAction));
  145.     }
  146.     
  147.     private LinkAction createReadMoreLink() {
  148.         LinkModel readMoreLink = new LinkModel("Read More...");
  149.         readMoreLink.setURLString(getHowToURLString());
  150.         LinkAction linkAction = new LinkAction(readMoreLink);
  151.         linkAction.setVisitingDelegate(new FramedEditorPaneLinkVisitor());
  152. //        URL url = getClass().getResource("/toolbarButtonGraphics/general/Information16.gif");
  153. //        linkAction.putValue(Action.SMALL_ICON, new ImageIcon(url));
  154.         return linkAction;
  155.     }
  156.     /**
  157.      * create components we need access to.
  158.      *
  159.      */
  160.     private void initComponents() {
  161.         descriptionContainer = new JXTitledPanel();
  162.         descriptionPane = new JXEditorPane();
  163.         demoContainer = new JXTitledPanel();
  164.         demoList = new JXList();
  165.     }
  166.     
  167.     private void configureComponents() {
  168.         descriptionPane.setEditable(false);
  169.         descriptionPane.setContentType("text/html");
  170.         descriptionPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
  171.         
  172.         demoList.setHighlighters(new HighlighterPipeline(
  173.                 new Highlighter[] {new MarginHighlighter(marginBorder)}));
  174.     }
  175.  
  176.     private void build() {
  177.         build(descriptionContainer, descriptionPane, false, "Information");
  178.         JXTitledPanel listContainer = new JXTitledPanel();
  179.         build(listContainer, demoList, true, "Table of Contents");
  180.         build(demoContainer, null, true, "Demo");
  181.         // this is a hack - components should have "nice" borders 
  182.         // by default
  183.         descriptionPane.setBorder(descriptionBorder);
  184.         // top/bottom margins - same as descriptionPane
  185.         demoList.setBorder(listBorder);
  186.         
  187.         JSplitPane detailsSP = createSplitPane(150, JSplitPane.VERTICAL_SPLIT);
  188.         detailsSP.setLeftComponent(descriptionContainer);
  189.         detailsSP.setRightComponent(demoContainer);
  190.         
  191.         JSplitPane mainSP = createSplitPane(200, JSplitPane.HORIZONTAL_SPLIT);
  192.         mainSP.setLeftComponent(listContainer);
  193.         mainSP.setRightComponent(detailsSP);
  194.         setLayout(new BorderLayout());
  195.         setBorder(Borders.TABBED_DIALOG_BORDER);
  196.         add(mainSP);
  197.     }
  198.     
  199.     private JSplitPane createSplitPane(int dividerLocation, int orientation) {
  200.         JSplitPane splitPane = new JSplitPane(orientation);
  201.         splitPane.setDividerLocation(dividerLocation);
  202.         splitPane.setBorder(null);
  203.       ((BasicSplitPaneUI)splitPane.getUI()).getDivider().setBorder(BorderFactory.createEmptyBorder());
  204.         return splitPane;
  205.     }
  206.     private void build(JXTitledPanel container, JComponent component, boolean opaque, String title) {
  207.         container.getContentContainer().setLayout(new BorderLayout());
  208.         container.setBorder(dsb);
  209.         container.setTitle(title);
  210.         if (component != null) {
  211.             component = buildScrollPane(component, opaque);
  212.             container.getContentContainer().add(component);
  213.         }
  214.     }
  215.     private JScrollPane buildScrollPane(JComponent component, boolean opaque) {
  216.       JScrollPane scrollPane = new JScrollPane(component);
  217.       scrollPane.setBorder(null);
  218.       scrollPane.setOpaque(opaque);
  219.       scrollPane.getViewport().setOpaque(opaque);
  220.       component.setOpaque(opaque);
  221.       return scrollPane;
  222.     }
  223.     
  224.     private void demoListValueChanged(ListSelectionEvent evt) {
  225.         DemoPanel dp = demoPanels.get(demoList.getSelectedIndex());
  226.         currentDemo = dp;
  227.         updateReadMoreLink();
  228.         descriptionContainer.setTitle("Information :: " + dp.getInformationTitle());
  229.         descriptionPane.setText(dp.getHtmlDescription());
  230.         descriptionPane.setCaretPosition(0);
  231.         demoContainer.setContentContainer(dp.getContent());
  232.         demoContainer.revalidate();
  233.         demoContainer.repaint();
  234.     }
  235.     private void updateReadMoreLink() {
  236.         URL url = getHowToURL();
  237.         if (url != null) {
  238.             readMoreLinkAction.getLink().setURL(url);
  239.             
  240.         }
  241.     }
  242.     
  243.     private URL getHowToURL() {
  244.         return SwingXDemo.class.getResource(currentDemo.getHowToURLString());
  245.     }
  246.     public File getSourceFile() {
  247.         if (currentDemo != null) {
  248.             return currentDemo.getSourceFile();
  249.         }
  250.         return super.getSourceFile();
  251.     }
  252.     
  253.     private HyperlinkListener linkListener=new HyperlinkListener(){
  254.         public void hyperlinkUpdate(final HyperlinkEvent hle){
  255.             
  256.             if(hle.getEventType()==HyperlinkEvent.EventType.ACTIVATED){
  257.                 try{
  258.                     SwingUtilities.invokeLater(new Runnable() {
  259.                         public void run() {
  260.                             URL url = getHowToURL();
  261. //                             readMoreLinkAction.getLink().setURL(url);
  262. //                             readMoreLinkAction.actionPerformed(null);
  263.                             new HowToWindow(currentDemo.getInformationTitle(), url).show();
  264.                         }
  265.                     });
  266.                 } catch(Exception e){
  267.                     System.err.println("Couldn't load page");
  268.                 }
  269.             }
  270.         }
  271.     };
  272.     
  273.     /**
  274.      * @param args the command line arguments
  275.      */
  276.     public static void main(String args[]) {
  277. //        UIManager.addAuxiliaryLookAndFeel(new ContextMenuAuxLF());
  278.         MainWindow.main(new String[]{"-d", SwingXDemo.class.getName()});
  279.     }
  280.     
  281.  }