src/demo/share/jfc/J2Ddemo/java2d/CloningFeature.java
changeset 50146 0bb0e464ee76
child 52252 de9486d74a74
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/demo/share/jfc/J2Ddemo/java2d/CloningFeature.java	Mon May 14 08:58:32 2018 -0700
@@ -0,0 +1,196 @@
+/*
+ *
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - 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.
+ *
+ *   - Neither the name of Oracle 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 java2d;
+
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.SoftBevelBorder;
+
+
+/**
+ * Illustration of how to use the clone feature of the demo.
+ */
+@SuppressWarnings("serial")
+public final class CloningFeature extends JPanel implements Runnable {
+
+    private final DemoInstVarsAccessor demoInstVars;
+    private Thread thread;
+    private JTextArea ta;
+
+    public CloningFeature(DemoInstVarsAccessor demoInstVars) {
+        this.demoInstVars = demoInstVars;
+
+        setLayout(new BorderLayout());
+        EmptyBorder eb = new EmptyBorder(5, 5, 5, 5);
+        SoftBevelBorder sbb = new SoftBevelBorder(BevelBorder.RAISED);
+        setBorder(new CompoundBorder(eb, sbb));
+
+        ta = new JTextArea("Cloning Demonstrated\n\nClicking once on a demo\n");
+        ta.setMinimumSize(new Dimension(300, 500));
+        JScrollPane scroller = new JScrollPane();
+        scroller.getViewport().add(ta);
+        ta.setFont(new Font("Dialog", Font.PLAIN, 14));
+        ta.setForeground(Color.black);
+        ta.setBackground(Color.lightGray);
+        ta.setEditable(false);
+
+        add("Center", scroller);
+
+        start();
+    }
+
+    public void start() {
+        thread = new Thread(this);
+        thread.setPriority(Thread.MAX_PRIORITY);
+        thread.setName("CloningFeature");
+        thread.start();
+    }
+
+    public void stop() {
+        if (thread != null) {
+            thread.interrupt();
+        }
+        thread = null;
+    }
+
+    @Override
+    @SuppressWarnings("SleepWhileHoldingLock")
+    public void run() {
+
+
+        int index = demoInstVars.getTabbedPane().getSelectedIndex();
+        if (index == 0) {
+            demoInstVars.getTabbedPane().setSelectedIndex(1);
+            try {
+                Thread.sleep(3333);
+            } catch (Exception e) {
+                return;
+            }
+        }
+
+        if (!demoInstVars.getControls().toolBarCB.isSelected()) {
+            demoInstVars.getControls().toolBarCB.setSelected(true);
+            try {
+                Thread.sleep(2222);
+            } catch (Exception e) {
+                return;
+            }
+        }
+
+        index = demoInstVars.getTabbedPane().getSelectedIndex() - 1;
+        DemoGroup dg = demoInstVars.getGroup()[index];
+        DemoPanel dp = (DemoPanel) dg.getPanel().getComponent(0);
+        if (dp.surface == null) {
+            ta.append("Sorry your zeroth component is not a Surface.");
+            return;
+        }
+
+        dg.mouseClicked(dp.surface);
+
+        try {
+            Thread.sleep(3333);
+        } catch (Exception e) {
+            return;
+        }
+
+        ta.append("Clicking the ToolBar double document button\n");
+        try {
+            Thread.sleep(3333);
+        } catch (Exception e) {
+            return;
+        }
+
+        dp = (DemoPanel) dg.clonePanels[0].getComponent(0);
+
+        if (dp.tools != null) {
+            for (int i = 0; i < 3 && thread != null; i++) {
+                ta.append("   Cloning\n");
+                dp.tools.cloneB.doClick();
+                try {
+                    Thread.sleep(3333);
+                } catch (Exception e) {
+                    return;
+                }
+            }
+        }
+
+        ta.append("Changing attributes \n");
+
+        try {
+            Thread.sleep(3333);
+        } catch (Exception e) {
+            return;
+        }
+
+        Component cmps[] = dg.clonePanels[0].getComponents();
+        for (int i = 0; i < cmps.length && thread != null; i++) {
+            if ((dp = (DemoPanel) cmps[i]).tools == null) {
+                continue;
+            }
+            switch (i) {
+                case 0:
+                    ta.append("   Changing AntiAliasing\n");
+                    dp.tools.aliasB.doClick();
+                    break;
+                case 1:
+                    ta.append("   Changing Composite & Texture\n");
+                    dp.tools.compositeB.doClick();
+                    dp.tools.textureB.doClick();
+                    break;
+                case 2:
+                    ta.append("   Changing Screen\n");
+                    dp.tools.screenCombo.setSelectedIndex(4);
+                    break;
+                case 3:
+                    ta.append("   Removing a clone\n");
+                    dp.tools.cloneB.doClick();
+            }
+            try {
+                Thread.sleep(3333);
+            } catch (Exception e) {
+                return;
+            }
+        }
+
+        ta.append("\nAll Done!");
+    }
+}