diff options
Diffstat (limited to 'src/demos/xtrans/Main.java')
-rwxr-xr-x | src/demos/xtrans/Main.java | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/src/demos/xtrans/Main.java b/src/demos/xtrans/Main.java new file mode 100755 index 0000000..783e7eb --- /dev/null +++ b/src/demos/xtrans/Main.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution 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. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use + * in the design, construction, operation or maintenance of any nuclear + * facility. + * + * Sun gratefully acknowledges that this software was originally authored + * and developed by Kenneth Bradley Russell and Christopher John Kline. + */ + +package demos.xtrans; + +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.table.*; +import javax.swing.tree.*; + +/** Demonstration showing off XTDesktopPane. + * + * @author Kenneth Russell + */ + +public class Main { + private XTDesktopPane desktop; + private XTBasicTransitionManager transManager; + + private static final int TABLE = 1; + private static final int TREE = 2; + + private Point loc = new Point(); + + private boolean scrollingEnabled = true; + private boolean rotationEnabled = true; + private boolean fadesEnabled = true; + private Random random; + + private void chooseNextTransition() { + // Only choose one if the user's constraints force us to + if (scrollingEnabled && rotationEnabled && fadesEnabled) { + return; + } + if (random == null) { + random = new Random(); + } + boolean fade = random.nextBoolean(); + if (!fadesEnabled) { + fade = false; + } + + XTBasicTransitionManager.Style style = XTBasicTransitionManager.STYLE_NO_MOTION; + if (scrollingEnabled) { + style = XTBasicTransitionManager.STYLE_SCROLL; + } else if (rotationEnabled) { + style = XTBasicTransitionManager.STYLE_ROTATE; + } + XTBasicTransitionManager.Direction direction = null; + switch (random.nextInt(4)) { + case 0: direction = XTBasicTransitionManager.DIR_LEFT; break; + case 1: direction = XTBasicTransitionManager.DIR_RIGHT; break; + case 2: direction = XTBasicTransitionManager.DIR_UP; break; + default: direction = XTBasicTransitionManager.DIR_DOWN; break; + } + transManager.setNextTransition(style, direction, fade); + } + + private void addWindow(int which) { + JInternalFrame frame = new JInternalFrame(); + frame.setResizable(true); + frame.setClosable(true); + frame.setVisible(true); + + switch (which) { + case TABLE: + { + frame.setTitle("Table Example"); + Object[][] data = produceTableData(3, 20); + DefaultTableModel model = new DefaultTableModel(data, new String[] { "A", "B", "C" }); + JTable table = new JTable(model); + JScrollPane scrollPane = new JScrollPane(table); + frame.getContentPane().add(scrollPane); + break; + } + + case TREE: + { + frame.setTitle("Tree Example"); + DefaultMutableTreeNode root = new DefaultMutableTreeNode(); + populateTree(root, 2); + JTree tree = new JTree(root); + tree.setRootVisible(false); + frame.getContentPane().add(tree); + break; + } + + default: + throw new IllegalArgumentException(); + } + + frame.setLocation(loc); + loc = new Point((loc.x + 20) % desktop.getWidth(), (loc.y + 20) % desktop.getHeight()); + frame.addInternalFrameListener(new InternalFrameAdapter() { + public void internalFrameClosing(InternalFrameEvent e) { + chooseNextTransition(); + } + }); + frame.pack(); + int sz = Math.min(desktop.getWidth() / 3, desktop.getHeight()); + frame.setSize(sz, sz); + chooseNextTransition(); + desktop.add(frame); + desktop.moveToFront(frame); + } + + private Object[][] produceTableData(int cols, int rows) { + Object[][] res = new Object[rows][]; + + Random r = new Random(); + + for (int i = 0; i < rows; i++) { + Object[] row = new Object[cols]; + for (int j = 0; j < cols; j++) { + row[j] = new Integer(r.nextInt(1000)); + } + res[i] = row; + } + + return res; + } + + private void populateTree(DefaultMutableTreeNode node, int depth) { + node.add(new DefaultMutableTreeNode("A")); + node.add(new DefaultMutableTreeNode("B")); + node.add(new DefaultMutableTreeNode("C")); + + if (depth > 0) { + for (Enumeration e = node.children(); e.hasMoreElements(); ) { + populateTree((DefaultMutableTreeNode) e.nextElement(), depth - 1); + } + } + } + + private void run(String[] args) { + JFrame frame = new JFrame("Desktop Demo"); + + JMenu menu = new JMenu("Actions"); + JMenuBar menuBar = new JMenuBar(); + JMenuItem item; + + item = new JMenuItem("Add Table"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + addWindow(TABLE); + } + }); + menu.add(item); + + item = new JMenuItem("Add Tree"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + addWindow(TREE); + } + }); + menu.add(item); + + item = new JMenuItem("Close all"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + Component[] cs = desktop.getComponents(); + for (int i = 0; i < cs.length; i++) { + chooseNextTransition(); + desktop.remove(cs[i]); + } + } + }); + menu.add(item); + + item = new JMenuItem("Quit"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.exit(0); + } + }); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK)); + menu.add(item); + + menuBar.add(menu); + + menu = new JMenu("Options"); + JCheckBoxMenuItem ckitem = new JCheckBoxMenuItem("Enable Scrolling"); + ckitem.setState(true); + ckitem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + scrollingEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); + } + }); + menu.add(ckitem); + + ckitem = new JCheckBoxMenuItem("Enable Rotation"); + ckitem.setState(true); + ckitem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + rotationEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); + } + }); + menu.add(ckitem); + + ckitem = new JCheckBoxMenuItem("Enable Fades"); + ckitem.setState(true); + ckitem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + fadesEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); + } + }); + menu.add(ckitem); + + menuBar.add(menu); + + frame.setJMenuBar(menuBar); + + desktop = new XTDesktopPane(); + transManager = (XTBasicTransitionManager) desktop.getTransitionManager(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().add(desktop); + + DisplayMode cur = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode(); + int width = (int) (cur.getWidth() * 0.75f); + int height = (int) (width * 3.0f / 4.0f); + if (height >= 95.0f * cur.getHeight()) { + height = (int) (cur.getHeight() * 0.75f); + width = (int) (height * 4.0f / 3.0f); + } + frame.setSize(width, height); + frame.setVisible(true); + } + + public static void main(String[] args) { + new Main().run(args); + } +} |