home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / J A V A / Java Development Kit V1.2 / jdk12-win32(1).exe / data1.cab / demos / demo / jfc / Java2D / Java2Demo.java < prev    next >
Encoding:
Java Source  |  1998-12-01  |  12.8 KB  |  382 lines

  1. /*
  2.  * @(#)Java2Demo.java    1.25 98/09/21
  3.  *
  4.  * Copyright 1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15.  
  16. import java.awt.*;
  17. import java.awt.event.*;
  18. import java.net.URL;
  19. import java.io.File;
  20. import javax.swing.*;
  21. import javax.swing.border.*;
  22.  
  23.  
  24. /**
  25.  * A demo that shows Java2D features.
  26.  *
  27.  * @version @(#)Java2Demo.java    1.25 98/09/21
  28.  * @author Brian Lichtenwalter  (framework, demos)
  29.  * @author Jim Graham           (demos)
  30.  */
  31. public class Java2Demo extends JPanel implements ItemListener, ActionListener
  32. {
  33.  
  34.     static Java2Demo demo;
  35.     static Controls controls;
  36.     static MemoryMonitor memorymonitor;
  37.     static PerformanceMonitor performancemonitor;
  38.     static JTabbedPane tabbedPane;
  39.     static JLabel progressLabel;
  40.     static JProgressBar progressBar;
  41.     static DemoGroup group[];
  42.  
  43.     private JCheckBoxMenuItem memoryCB, perfCB;
  44.     private JCheckBoxMenuItem controlsCB;
  45.     private JMenuItem runMI, cloneMI, fileMI;
  46.     private RunWindow runwindow = new RunWindow();
  47.     private CloningFeature cloningfeature;
  48.     private JFrame rf, cf;
  49.     private GlobalPanel gp;
  50.  
  51.  
  52.     /**
  53.      * Construct the Java2D Demo.
  54.      */
  55.     public Java2Demo() {
  56.  
  57.         setLayout(new BorderLayout());
  58.         setBorder(new EtchedBorder());
  59.  
  60.         add(createMenuBar(), BorderLayout.NORTH);
  61.  
  62.         new DemoImages();
  63.  
  64.         controls = new Controls();
  65.         memorymonitor = new MemoryMonitor();
  66.         performancemonitor = new PerformanceMonitor();
  67.  
  68.         gp = new GlobalPanel();
  69.  
  70.         tabbedPane = new JTabbedPane();
  71.         tabbedPane.setFont(new Font("serif", Font.PLAIN, 12));
  72.         tabbedPane.addChangeListener(gp);
  73.  
  74.         // Retrieve directory names in demos directory
  75.         URL url = Java2Demo.class.getResource("demos");
  76.         File demosDir = new File(url.getFile());
  77.  
  78.         if (demosDir != null && demosDir.isDirectory()) {
  79.             String list[] = demosDir.list();
  80.             group = new DemoGroup[list.length];
  81.             progressBar.setMaximum(list.length);
  82.             sort(list);
  83.             for (int i = 0; i < list.length; i++) {
  84.                 File dirs = new File(demosDir.getPath(), list[i]);
  85.                 if (dirs != null && dirs.isDirectory()) {
  86.                     progressLabel.setText("Loading demos." + dirs.getName());
  87.                     group[i] = new DemoGroup(dirs.getName());
  88.                     if (i == 0) {
  89.         // Make the "always visible" global panel the first child so
  90.         // that it always remains "on top" of the z-order
  91.                         tabbedPane.addTab(dirs.getName(), gp);
  92.                     } else {
  93.                         tabbedPane.addTab(dirs.getName(), null);
  94.                     }
  95.                     progressBar.setValue(progressBar.getValue() + 1);
  96.                 }
  97.             }
  98.         } else {
  99.             System.out.println("Fatal, couldn't find demos directory. ");
  100.             System.exit(1);
  101.         }
  102.  
  103.         add(tabbedPane, BorderLayout.CENTER);
  104.     }
  105.  
  106.  
  107.     private JMenuBar createMenuBar() {
  108.  
  109.         JPopupMenu.setDefaultLightWeightPopupEnabled(false);
  110.         JMenuBar menuBar = new JMenuBar();
  111.  
  112.         if (Java2DemoApplet.applet == null) {
  113.             JMenu file = (JMenu) menuBar.add(new JMenu("File"));
  114.             fileMI = (JMenuItem) file.add(new JMenuItem("Exit"));
  115.             fileMI.addActionListener(this);
  116.         }
  117.  
  118.         JMenu options = (JMenu) menuBar.add(new JMenu("Options"));
  119.  
  120.         controlsCB = (JCheckBoxMenuItem) options.add(
  121.                 new JCheckBoxMenuItem("Global Controls", true));
  122.         controlsCB.addItemListener(this);
  123.  
  124.         memoryCB = (JCheckBoxMenuItem) options.add(
  125.                 new JCheckBoxMenuItem("Memory Monitor", true));
  126.         memoryCB.addItemListener(this);
  127.  
  128.         perfCB = (JCheckBoxMenuItem) options.add(
  129.                 new JCheckBoxMenuItem("Performance Monitor", true));
  130.         perfCB.addItemListener(this);
  131.  
  132.         options.add(new JSeparator());
  133.  
  134.         runMI = (JMenuItem) options.add(new JMenuItem("Run Window"));
  135.         runMI.addActionListener(this);
  136.  
  137.         cloneMI = (JMenuItem) options.add(new JMenuItem("Cloning Feature"));
  138.         cloneMI.addActionListener(this);
  139.  
  140.         return menuBar;
  141.     }
  142.  
  143.  
  144.     /**
  145.      * sort directory names
  146.      */ 
  147.     static void sort(String a[]) {
  148.         for (int i = a.length; --i>=0; ) {
  149.             boolean swapped = false;
  150.             for (int j = 0; j<i; j++) {
  151.                 if (a[j].compareTo(a[j+1]) > 0) {
  152.                     String T = a[j];
  153.                     a[j] = a[j+1];
  154.                     a[j+1] = T;
  155.                     swapped = true;
  156.                 }
  157.             }
  158.             if (!swapped)
  159.                 return;
  160.         }
  161.     }
  162.  
  163.  
  164.     private void createRunWindow() {
  165.         if (rf != null) {
  166.             return;
  167.         }
  168.         WindowListener l = new WindowAdapter() {
  169.             public void windowClosing(WindowEvent e) {
  170.                 runwindow.stop(); rf.dispose();
  171.             }
  172.             public void windowClosed(WindowEvent e) { 
  173.                 rf = null;
  174.             }
  175.         };
  176.         rf = new JFrame("Run");
  177.         rf.addWindowListener(l);
  178.         rf.getContentPane().add("Center", runwindow);
  179.         rf.pack();
  180.         rf.setSize(new Dimension(240,140));
  181.         rf.show();
  182.     }
  183.  
  184.  
  185.     public void actionPerformed(ActionEvent e) {
  186.         if (e.getSource().equals(fileMI)) {
  187.             System.exit(0);
  188.         } else if (e.getSource().equals(runMI)) {
  189.             createRunWindow();
  190.         } else if (e.getSource().equals(cloneMI)) {
  191.             if (cloningfeature == null) {
  192.                 cloningfeature = new CloningFeature();
  193.                 WindowListener l = new WindowAdapter() {
  194.                     public void windowClosing(WindowEvent e) {
  195.                         cloningfeature.stop(); cf.dispose();
  196.                     }
  197.                     public void windowClosed(WindowEvent e) {
  198.                         cloningfeature = null;
  199.                     }
  200.                 };
  201.                 cf = new JFrame("Cloning Demo");
  202.                 cf.addWindowListener(l);
  203.                 cf.getContentPane().add("Center", cloningfeature);
  204.                 cf.pack();
  205.                 cf.setSize(new Dimension(320,300));
  206.                 cf.show();
  207.             }
  208.         }
  209.     }
  210.  
  211.  
  212.     public void itemStateChanged(ItemEvent e) {
  213.         if (e.getSource().equals(controlsCB)) {
  214.             if (controls.isVisible()) {
  215.                 controls.setVisible(false);
  216.                 Component cmps[] = controls.texturechooser.getComponents();
  217.                 for (int i = 0; i < cmps.length; i++) {
  218.                     cmps[i].setVisible(false);
  219.                 }
  220.             } else {
  221.                 controls.setVisible(true);
  222.                 Component cmps[] = controls.texturechooser.getComponents();
  223.                 for (int i = 0; i < cmps.length; i++) {
  224.                     cmps[i].setVisible(true);
  225.                 }
  226.             }
  227.         } else if (e.getSource().equals(memoryCB)) {
  228.             if (memorymonitor.isVisible()) {
  229.                 memorymonitor.setVisible(false);
  230.                 memorymonitor.mc.setVisible(false);
  231.                 memorymonitor.mc.stop();
  232.             } else {
  233.                 memorymonitor.setVisible(true);
  234.                 memorymonitor.mc.setVisible(true);
  235.                 memorymonitor.mc.start();
  236.             }
  237.         } else if (e.getSource().equals(perfCB)) {
  238.             if (performancemonitor.isVisible()) {
  239.                 performancemonitor.setVisible(false);
  240.                 performancemonitor.mc.setVisible(false);
  241.                 performancemonitor.mc.stop();
  242.             } else {
  243.                 performancemonitor.setVisible(true);
  244.                 performancemonitor.mc.setVisible(true);
  245.                 performancemonitor.mc.start();
  246.             }
  247.         }
  248.         validate();
  249.     }
  250.  
  251.  
  252.     public void start() {
  253.         group[tabbedPane.getSelectedIndex()].setup(false);
  254.         if (memorymonitor.mc.thread == null && memoryCB.getState()) {
  255.             memorymonitor.mc.start();
  256.         }
  257.         if (performancemonitor.mc.thread == null && perfCB.getState()) {
  258.             performancemonitor.mc.start();
  259.         }
  260.     }
  261.  
  262.  
  263.     public void stop() {
  264.         memorymonitor.mc.stop();
  265.         performancemonitor.mc.stop();
  266.         int i = tabbedPane.getSelectedIndex();
  267.         group[i].shutDown(group[i].getPanel());
  268.     }
  269.  
  270.  
  271.     static void addToGridBag(JPanel panel, Component comp,
  272.             int x, int y, int w, int h, double weightx, double weighty) {
  273.  
  274.         GridBagLayout gbl = (GridBagLayout) panel.getLayout();
  275.         GridBagConstraints c = new GridBagConstraints();
  276.         c.fill = GridBagConstraints.BOTH;
  277.         c.gridx = x;
  278.         c.gridy = y;
  279.         c.gridwidth = w;
  280.         c.gridheight = h;
  281.         c.weightx = weightx;
  282.         c.weighty = weighty;
  283.         panel.add(comp);
  284.         gbl.setConstraints(comp, c);
  285.     }
  286.  
  287.  
  288.     public static void main(String args[]) {
  289.  
  290.         JFrame frame = new JFrame("Java2D Demo");
  291.         frame.getAccessibleContext().setAccessibleDescription("A sample application to demonstrate Java2D features");
  292.  
  293.         JOptionPane.setRootFrame(frame);
  294.  
  295.         JPanel progressPanel = new JPanel() {
  296.             public Insets getInsets() {
  297.                 return new Insets(40,30,20,30);
  298.             }
  299.         };
  300.         progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.Y_AXIS));
  301.         frame.getContentPane().add(progressPanel, BorderLayout.CENTER);
  302.  
  303.         Dimension d = new Dimension(400, 20);
  304.         progressLabel = new JLabel("Loading, please wait...");
  305.         progressLabel.setAlignmentX(CENTER_ALIGNMENT);
  306.         progressLabel.setMaximumSize(d);
  307.         progressLabel.setPreferredSize(d);
  308.         progressPanel.add(progressLabel);
  309.         progressPanel.add(Box.createRigidArea(new Dimension(1,20)));
  310.  
  311.         progressBar = new JProgressBar();
  312.         progressBar.setStringPainted(true);
  313.         progressLabel.setLabelFor(progressBar);
  314.         progressBar.setAlignmentX(CENTER_ALIGNMENT);
  315.         progressBar.setMinimum(0);
  316.         progressBar.setValue(0);
  317.         progressBar.getAccessibleContext().setAccessibleName("Java2D loading progress");
  318.         progressPanel.add(progressBar);
  319.  
  320.         int INITIAL_WIDTH = 400;
  321.         int INITIAL_HEIGHT = 200;
  322.         frame.setSize(INITIAL_WIDTH, INITIAL_HEIGHT);
  323.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  324.         frame.setLocation(screenSize.width/2 - INITIAL_WIDTH/2,
  325.                           screenSize.height/2 - INITIAL_HEIGHT/2);
  326.         frame.show();
  327.  
  328.         frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  329.  
  330.         demo = new Java2Demo();
  331.  
  332.         WindowListener l = new WindowAdapter() {
  333.             public void windowClosing(WindowEvent e) {System.exit(0);}
  334.             public void windowDeiconified(WindowEvent e) { demo.start(); }
  335.             public void windowIconified(WindowEvent e) { demo.stop(); }
  336.         };
  337.         frame.addWindowListener(l);
  338.  
  339.         frame.getContentPane().removeAll();
  340.         frame.getContentPane().setLayout(new BorderLayout());
  341.         frame.getContentPane().add(demo, BorderLayout.CENTER);
  342.         int WIDTH = 730;
  343.         int HEIGHT = 560;
  344.         frame.setLocation(screenSize.width/2 - WIDTH/2,
  345.                           screenSize.height/2 - HEIGHT/2);
  346.  
  347.         frame.setSize(WIDTH, HEIGHT);
  348.         frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  349.  
  350.         frame.validate();
  351.         frame.repaint();
  352.         demo.requestDefaultFocus();
  353.  
  354.         for (int i = 0; i < args.length; i++) {
  355.             String s = args[i].substring(args[i].indexOf('=')+1);
  356.             if (args[i].startsWith("-runs=")) {
  357.                 demo.createRunWindow();
  358.                 RunWindow.numRuns = Integer.parseInt(s);
  359.                 RunWindow.exit = true;
  360.             } else if (args[i].startsWith("-delay=")) {
  361.                 RunWindow.setDelay(Integer.parseInt(s));
  362.             } else if (args[i].startsWith("-screen=")) {
  363.                 demo.controls.imgTypeCombo.setSelectedIndex(Integer.parseInt(s));
  364.             } else if (args[i].startsWith("-antialias=")) {
  365.                 demo.controls.aliasCB.setSelected(s.endsWith("true"));
  366.             } else if (args[i].startsWith("-rendering=")) {
  367.                 demo.controls.renderCB.setSelected(s.endsWith("true"));
  368.             } else if (args[i].startsWith("-texture=")) {
  369.                 demo.controls.textureCB.setSelected(s.endsWith("true"));
  370.             } else if (args[i].startsWith("-composite=")) {
  371.                 demo.controls.compositeCB.setSelected(s.endsWith("true"));
  372.             } else if (args[i].startsWith("-verbose")) {
  373.                 demo.controls.verboseCB.setSelected(true);
  374.             }
  375.         }
  376.  
  377.         if (RunWindow.exit) {
  378.             RunWindow.runB.doClick();
  379.         }
  380.     }
  381. }
  382.