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 | |
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
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 + } |