diff options
author | kcr <kcr@28c7f869-5b4e-e670-f602-82bfaf57f300> | 2007-07-31 23:34:14 +0000 |
---|---|---|
committer | kcr <kcr@28c7f869-5b4e-e670-f602-82bfaf57f300> | 2007-07-31 23:34:14 +0000 |
commit | be0a4c818b174da6b637bfe1a3be8f4c4d839de2 (patch) | |
tree | bb9af3f5ffe132c1b8ae079f27b86bb59de2d277 /src/classes/org/jdesktop | |
parent | 2b68c506ff2ba53a2cd9a6d7470b0aff77070fc3 (diff) |
1. New Java 3D applet template that avoids MainFrame, but can still run as
an applet or as an application.
2. Change applet .html file to use JNLPAppletLauncher
Diffstat (limited to 'src/classes/org/jdesktop')
3 files changed, 280 insertions, 67 deletions
diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form new file mode 100644 index 0000000..a70fb22 --- /dev/null +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.0" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="guiPanel"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="North"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/> + <SubComponents> + <Component class="javax.swing.JButton" name="pauseButton"> + <Properties> + <Property name="text" type="java.lang.String" value="Pause"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="pauseButtonActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="4" insetsLeft="4" insetsBottom="4" insetsRight="4" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JButton" name="resumeButton"> + <Properties> + <Property name="text" type="java.lang.String" value="Resume"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="resumeButtonActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="4" insetsLeft="4" insetsBottom="4" insetsRight="4" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="drawingPanel"> + <Properties> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[500, 500]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="Center"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> + </Container> + </SubComponents> +</Form> diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html index 9cb15a4..037c7c1 100644 --- a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html @@ -1,15 +1,26 @@ -<HTML> -<HEAD> -<TITLE>Hello, Universe</TITLE> -</HEAD> -<BODY BGCOLOR="#000000"> -<applet align=middle codebase="../../../../.." code="org.jdesktop.j3d.examples.applet3d.Applet3D" width=256 height=256> -<blockquote> -<hr> -If you were using a Java-capable browser, -you would see Applet3D instead of this paragraph. -<hr> -</blockquote> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<title>Simple 3D Applet</title> +</head> +<body> +<applet code="org.jdesktop.applet.util.JNLPAppletLauncher" + width=500 height=400 + archive="../../../../../../../dist/j3d-examples.jar, + http://download.java.net/media/applet-launcher/applet-launcher.jar, + http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dcore.jar, + http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dutils.jar, + http://download.java.net/media/java3d/webstart/release/vecmath/latest/vecmath.jar, + http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jar, + http://download.java.net/media/gluegen/webstart/gluegen-rt.jar"> + <param name="codebase_lookup" value="false"> + <param name="subapplet.classname" value="org.jdesktop.j3d.examples.applet3d.Applet3D$MyApplet"> + <param name="subapplet.displayname" value="Java 3D Simple Applet"> + <param name="jnlpNumExtensions" value="1"> + <param name="jnlpExtension1" value="http://download.java.net/media/java3d/webstart/release/java3d-latest.jnlp"> + <param name="progressbar" value="true"> + <param name="noddraw.check" value="true"> </applet> -</BODY> -</HTML> +<p>Simple Java 3D Applet</p> +</body> +</html> diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java index 565800a..55e7cdc 100644 --- a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java @@ -44,86 +44,219 @@ package org.jdesktop.j3d.examples.applet3d; -import java.applet.Applet; +import com.sun.j3d.utils.geometry.ColorCube; +import com.sun.j3d.utils.universe.SimpleUniverse; import java.awt.BorderLayout; -import java.awt.event.*; import java.awt.GraphicsConfiguration; -import com.sun.j3d.utils.applet.MainFrame; -import com.sun.j3d.utils.geometry.ColorCube; -import com.sun.j3d.utils.universe.*; -import javax.media.j3d.*; -import javax.vecmath.*; - -public class Applet3D extends Applet { +import javax.media.j3d.Alpha; +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Canvas3D; +import javax.media.j3d.RotationInterpolator; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.swing.JApplet; +import javax.swing.JFrame; +import javax.swing.JPopupMenu; +import javax.swing.WindowConstants; +import javax.vecmath.Point3d; - private SimpleUniverse u = null; +/** + * Simple Java 3D program that can be run as an application or as an applet. + */ +public class Applet3D extends javax.swing.JPanel { + private SimpleUniverse univ = null; + private BranchGroup scene = null; + + private Alpha rotationAlpha1; + private Alpha rotationAlpha2; + public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); - // Create the TransformGroup node and initialize it to the - // identity. Enable the TRANSFORM_WRITE capability so that - // our behavior code can modify it at run time. Add it to - // the root of the subgraph. - TransformGroup objTrans = new TransformGroup(); - objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); - objRoot.addChild(objTrans); + // Create two TransformGroup nodes in series + TransformGroup objTrans1 = new TransformGroup(); + objTrans1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + objRoot.addChild(objTrans1); - // Create a simple Shape3D node; add it to the scene graph. - objTrans.addChild(new ColorCube(0.4)); + // Create two TransformGroup nodes in series + TransformGroup objTrans2 = new TransformGroup(); + objTrans2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + objTrans1.addChild(objTrans2); - // Create a new Behavior object that will perform the - // desired operation on the specified transform and add - // it into the scene graph. - Transform3D yAxis = new Transform3D(); - Alpha rotationAlpha = new Alpha(-1, 4000); + // Create a simple Shape3D node; add it to the scene graph. + objTrans2.addChild(new ColorCube(0.4)); - RotationInterpolator rotator = - new RotationInterpolator(rotationAlpha, objTrans, yAxis, - 0.0f, (float) Math.PI*2.0f); + // Create 2 new Behavior objects that will perform the + // desired operations on the specified transforms and add + // them into the scene graph. BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); - rotator.setSchedulingBounds(bounds); - objRoot.addChild(rotator); - // Have Java 3D perform optimizations on this scene graph. - objRoot.compile(); + Transform3D yAxis1 = new Transform3D(); + rotationAlpha1 = new Alpha(-1, 4000); + + RotationInterpolator rotator1 = + new RotationInterpolator(rotationAlpha1, objTrans1, yAxis1, + 0.0f, (float) Math.PI*2.0f); + rotator1.setSchedulingBounds(bounds); + objRoot.addChild(rotator1); + + Transform3D yAxis2 = new Transform3D(); + yAxis2.rotX(Math.PI/4.0); + rotationAlpha2 = new Alpha(-1, 10000); + + RotationInterpolator rotator2 = + new RotationInterpolator(rotationAlpha2, objTrans2, yAxis2, + 0.0f, (float) Math.PI*2.0f); + rotator2.setSchedulingBounds(bounds); + objRoot.addChild(rotator2); return objRoot; } - public Applet3D() { + private Canvas3D createUniverse() { + GraphicsConfiguration config = + SimpleUniverse.getPreferredConfiguration(); + + Canvas3D c = new Canvas3D(config); + + univ = new SimpleUniverse(c); + + // This will move the ViewPlatform back a bit so the + // objects in the scene can be viewed. + univ.getViewingPlatform().setNominalViewingTransform(); + + // Ensure at least 5 msec per frame (i.e., < 200Hz) + univ.getViewer().getView().setMinimumFrameCycleTime(5); + + return c; + } + + private void destroy() { + univ.cleanup(); } - public void init() { - setLayout(new BorderLayout()); - GraphicsConfiguration config = - SimpleUniverse.getPreferredConfiguration(); + /** + * Creates new form Applet3D + */ + public Applet3D() { + // Initialize the GUI components + JPopupMenu.setDefaultLightWeightPopupEnabled(false); + initComponents(); - Canvas3D c = new Canvas3D(config); - add("Center", c); + // Create Canvas3D and SimpleUniverse; add canvas to drawing panel + Canvas3D c = createUniverse(); + drawingPanel.add(c, BorderLayout.CENTER); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + univ.addBranchGraph(scene); + } + + // ---------------------------------------------------------------- + + // Applet framework - // Create a simple scene and attach it to the virtual universe - BranchGroup scene = createSceneGraph(); - u = new SimpleUniverse(c); + public static class MyApplet extends JApplet { + Applet3D mainPanel; - // This will move the ViewPlatform back a bit so the - // objects in the scene can be viewed. - u.getViewingPlatform().setNominalViewingTransform(); + public void init() { + setLayout(new BorderLayout()); + mainPanel = new Applet3D(); + add(mainPanel, BorderLayout.CENTER); + } - u.addBranchGraph(scene); + public void destroy() { + mainPanel.destroy(); + } } - public void destroy() { - u.cleanup(); + // Application framework + + private static class MyFrame extends JFrame { + MyFrame() { + setLayout(new BorderLayout()); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setTitle("Simple 3D Applet"); + getContentPane().add(new Applet3D(), BorderLayout.CENTER); + pack(); + } } - // - // The following allows Applet3D to be run as an application - // as well as an applet - // - public static void main(String[] args) { - new MainFrame(new Applet3D(), 256, 256); + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new MyFrame().setVisible(true); + } + }); } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + guiPanel = new javax.swing.JPanel(); + pauseButton = new javax.swing.JButton(); + resumeButton = new javax.swing.JButton(); + drawingPanel = new javax.swing.JPanel(); + + setLayout(new java.awt.BorderLayout()); + + guiPanel.setLayout(new java.awt.GridBagLayout()); + + pauseButton.setText("Pause"); + pauseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + pauseButtonActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); + guiPanel.add(pauseButton, gridBagConstraints); + + resumeButton.setText("Resume"); + resumeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + resumeButtonActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); + guiPanel.add(resumeButton, gridBagConstraints); + + add(guiPanel, java.awt.BorderLayout.NORTH); + + drawingPanel.setPreferredSize(new java.awt.Dimension(500, 500)); + drawingPanel.setLayout(new java.awt.BorderLayout()); + add(drawingPanel, java.awt.BorderLayout.CENTER); + }// </editor-fold>//GEN-END:initComponents + + private void resumeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resumeButtonActionPerformed + rotationAlpha1.resume(); + rotationAlpha2.resume(); + }//GEN-LAST:event_resumeButtonActionPerformed + + private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pauseButtonActionPerformed + rotationAlpha1.pause(); + rotationAlpha2.pause(); + }//GEN-LAST:event_pauseButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + private javax.swing.JPanel guiPanel; + private javax.swing.JButton pauseButton; + private javax.swing.JButton resumeButton; + // End of variables declaration//GEN-END:variables + } |