菜鸟关于Swing JButton和Java3D结合的一个问题 本帖最后由 snoopy79 于 2009-10-15 21:16:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚学Java一个多月,很多东西都不懂。现在被老师赶着写个程序,要实现4*4*4的小立方体依次出现的效果,还要用JSlider和JButton去控制它。我现在把JSlider那块写完了,可以做到拖动滑块Canvas上出现相应的立方体数。但是Button那里搞不定,我想要的是一按Start动画从头开始,按Stop就停止。请大家帮我看一下,下面是代码,被我写得有点乱。另外,我是新手,分数少得可怜,不好意思。// TestBoundingBox.javaimport java.awt.BorderLayout;import java.awt.Frame;import java.awt.GraphicsConfiguration;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.media.j3d.Alpha;import javax.media.j3d.BoundingBox;import javax.media.j3d.BoundingSphere;import javax.media.j3d.BranchGroup;import javax.media.j3d.Canvas3D;import javax.swing.JButton;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.event.*;import javax.vecmath.Point3d;import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;import com.sun.j3d.utils.universe.SimpleUniverse;import com.sun.j3d.utils.universe.ViewingPlatform;public class TestBoundingBox {/*** set coordinates for every surface of the bounding box** @param points* @param vs* @param position*/private Frame frame;private JPanel panel;private JSlider slider;private JButton startButton;private JButton stopButton;private int numberOfPortion;private int numberOfPortionSum;private SingleBox[] singleBoxes;private Canvas3D canvas3D;private BoundingBox bbox;private BranchGroup bg;private SimpleUniverse simpleU;private int PreDatum;static final int MIN = 0;static final int INIT = 0;public void discreteCube(BoundingBox bbox, Double factor,Point3d translation, BranchGroup objRoot, String color,Integer viewType, int numberOfPortion) {Point3d lower = new Point3d();bbox.getLower(lower);Point3d upper = new Point3d();bbox.getUpper(upper);double interval = Math.abs(upper.x - lower.x) / numberOfPortion;BoundingBox[][][] bb = new BoundingBox[numberOfPortion][numberOfPortion][numberOfPortion];int counter = 0;for (int i = 0; i < numberOfPortion; i++) {for (int j = 0; j < numberOfPortion; j++) {for (int k = 0; k < numberOfPortion; k++) {bb[i][j][k] = new BoundingBox(new Point3d(lower.x + i* interval, lower.y + j * interval, lower.z + k* interval), new Point3d(lower.x + (i + 1)* interval, lower.y + (j + 1) * interval, lower.z+ (k + 1) * interval));singleBoxes[counter].drawBox(bb[i][j][k], factor, translation, objRoot,color, viewType);counter++;}}}System.out.println("The volume of unit cube is: " + interval * interval* interval);System.out.println("The volume of whole cube is: " + interval* numberOfPortion * interval * numberOfPortion * interval* numberOfPortion);}private void setupView(SimpleUniverse universe, Canvas3D canvas,BoundingSphere bounds) {// add mouse interaction to the ViewingPlatformOrbitBehavior orbit = new OrbitBehavior(canvas,OrbitBehavior.REVERSE_ALL);orbit.setSchedulingBounds(bounds);ViewingPlatform viewingPlatform = universe.getViewingPlatform();// This will move the ViewPlatform back a bit so the// objects in the scene can be viewed.viewingPlatform.setNominalViewingTransform();viewingPlatform.setViewPlatformBehavior(orbit);}public TestBoundingBox() {PreDatum = -1;numberOfPortion = 4;numberOfPortionSum = numberOfPortion * numberOfPortion* numberOfPortion;singleBoxes = new SingleBox[numberOfPortionSum];for (int i = 0; i < numberOfPortionSum; i++) {singleBoxes[i] = new SingleBox();}Point3d min = new Point3d(-1, -1, -1);Point3d max = new Point3d(1, 1, 1);bbox = new BoundingBox();bbox.setLower(min);bbox.setUpper(max);frame = new Frame("3D Modell");GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();canvas3D = new Canvas3D(config);canvas3D.setSize(500, 500);canvas3D.setDoubleBufferEnable(true);frame.add(canvas3D);panel = new JPanel();slider = new JSlider(JSlider.HORIZONTAL, MIN, numberOfPortion* numberOfPortion * numberOfPortion - 1, INIT);slider.addChangeListener(new SliderListener());slider.setMajorTickSpacing(1);// slider.setMinorTickSpacing(2);slider.setPaintTicks(true);slider.setPaintLabels(true);startButton = new JButton("start");startButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {System.out.println("start Animation");redo(slider.getValue());// if (PreDatum > -1)// {// if(PreDatum > slider.getValue()){//// }// }//// for (int i = 0; i < numberOfPortionSum; i++)// {// singleBoxes[i].startDraw(0);// }//// for (int i = 0; i < numberOfPortionSum; i++)// {// singleBoxes[i].setTransparent(1);// }// for (int i = 0; i < numberOfPortionSum; i++) {// singleBoxes[i].setTransparent(1);// }// for (int i = 0; i < slider.getValue(); i++)// {// singleBoxes[i].startDraw(i);// }//// for (int i = 0; i < numberOfPortionSum; i++) {// //singleBoxes[i].setTransparent(0);// singleBoxes[i].startDraw(i);// }}});stopButton = new JButton("stop");stopButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {simpleU.cleanup();simpleU.getCanvas();canvas3D.repaint();// discreteCube(bbox, null, null, bg, "red", null,// numberOfPortion);}});frame.add(panel, BorderLayout.SOUTH);panel.add(slider, BorderLayout.WEST);panel.add(startButton);panel.add(stopButton);simpleU = new SimpleUniverse(canvas3D);bg = new BranchGroup();discreteCube(bbox, null, null, bg, "red", null, numberOfPortion);simpleU.addBranchGraph(bg);BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),1000.0);this.setupView(simpleU, canvas3D, bounds);simpleU.getViewingPlatform().setNominalViewingTransform();frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent winEvent) {System.exit(0);}});frame.pack();frame.setVisible(true);}public class SliderListener implements ChangeListener{public void stateChanged(ChangeEvent e){System.out.println(slider.getValue());if (PreDatum > -1){if(PreDatum > slider.getValue()){}}for (int i = 0; i < numberOfPortionSum; i++){singleBoxes[i].startDraw(0); }for (int i = 0; i < slider.getValue(); i++){singleBoxes[i].setTransparent(0);}for (int i = numberOfPortionSum-1; i > slider.getValue(); i--){singleBoxes[i].setTransparent(1);}// for (int i = 0; i < slider.getValue(); i++) {// singleBoxes[i].startDraw(0);// }}}public void redo(int datum){// bg = new BranchGroup();// discreteCube(bbox, null, null, bg, "red", null, numberOfPortion);// simpleU.addBranchGraph(bg);//if (PreDatum > -1){if(PreDatum > datum){}}for (int i = 0; i < datum; i++){singleBoxes[i].setTransparent(0);singleBoxes[i].startDraw(i); }for (int i = numberOfPortionSum-1; i > datum; i--){singleBoxes[i].setTransparent(1);// singleBoxes[i].startDraw(0);}}public static void main(String[] args) {new TestBoundingBox();}} 提示说我帖子太长,下面还有段代码:// SingleBox.javaimport java.awt.Color;import javax.media.j3d.Alpha;import javax.media.j3d.Appearance;import javax.media.j3d.BoundingBox;import javax.media.j3d.BoundingSphere;import javax.media.j3d.BranchGroup;import javax.media.j3d.ColoringAttributes;import javax.media.j3d.Material;import javax.media.j3d.PolygonAttributes;import javax.media.j3d.QuadArray;import javax.media.j3d.Shape3D;import javax.media.j3d.Transform3D;import javax.media.j3d.TransformGroup;import javax.media.j3d.TransparencyAttributes;import javax.media.j3d.TransparencyInterpolator;import javax.vecmath.Color3f;import javax.vecmath.Point3d;import javax.vecmath.Vector3d;public class SingleBox {private Alpha alpha;private Appearance app;TransparencyAttributes objTransp;private void setBoundingBoxSurfacePoints(Point3d[] points,Point3d[][][] vs, int position) {int count = 0;switch (position) {case 0:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[0][i][j];count = count + 1;}}count = 0;break;case 1:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[1][i][j];count = count + 1;}}count = 0;break;case 2:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[i][0][j];count = count + 1;}}count = 0;break;case 3:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[i][1][j];count = count + 1;}}count = 0;break;case 4:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[i][j][0];count = count + 1;}}count = 0;break;case 5:for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {points[count] = vs[i][j][1];count = count + 1;}}count = 0;break;default:break;}}public SingleBox(){alpha = new Alpha();alpha.setLoopCount(1);alpha.setMode(Alpha.DECREASING_ENABLE);alpha.setPhaseDelayDuration(200);alpha.pause();}public void resetBox(){alpha.pause();}public void drawBox(BoundingBox bbox, Double factor,Point3d translation, BranchGroup objRoot, String color,Integer viewType) {if (factor == null) {factor = 1.0d;}Point3d lower = new Point3d();bbox.getLower(lower);Point3d upper = new Point3d();bbox.getUpper(upper);PolygonAttributes pAtt = new PolygonAttributes();pAtt.setCullFace(PolygonAttributes.CULL_NONE);if (viewType == null) {pAtt.setPolygonMode(PolygonAttributes.POLYGON_LINE);} else {pAtt.setPolygonMode(PolygonAttributes.POLYGON_FILL);}pAtt.setBackFaceNormalFlip(true);Material mat = new Material();mat.setDiffuseColor(1.f, 1.f, 0);ColoringAttributes ca_2 = new ColoringAttributes();if (color != null & color.equalsIgnoreCase("red")) {ca_2.setColor(new Color3f(Color.RED));}if (color != null & color.equalsIgnoreCase("blue")) {ca_2.setColor(new Color3f(Color.BLUE));}if (color != null & color.equalsIgnoreCase("green")) {ca_2.setColor(new Color3f(Color.GREEN));}if (color != null & color.equalsIgnoreCase("gray")) {ca_2.setColor(new Color3f(Color.GRAY));}if (color != null & color.equalsIgnoreCase("yellow")) {ca_2.setColor(new Color3f(Color.YELLOW));}if (color != null & color.equalsIgnoreCase("black")) {ca_2.setColor(new Color3f(Color.BLACK));}if (color == null) {ca_2.setColor(new Color3f(Color.BLUE));}setApp(new Appearance());getApp().setColoringAttributes(ca_2);getApp().setPolygonAttributes(pAtt);getApp().setMaterial(mat);Point3d[][][] vs = new Point3d[2][2][2];vs[0][0][0] = new Point3d();vs[0][0][1] = new Point3d();vs[0][1][0] = new Point3d();vs[0][1][1] = new Point3d();vs[1][0][0] = new Point3d();vs[1][0][1] = new Point3d();vs[1][1][0] = new Point3d();vs[1][1][1] = new Point3d();for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {vs[0][i][j].setX(lower.x * factor);vs[1][i][j].setX(upper.x * factor);vs[i][0][j].setY(lower.y * factor);vs[i][1][j].setY(upper.y * factor);vs[i][j][0].setZ(lower.z * factor);vs[i][j][1].setZ(upper.z * factor);}}for (int i = 0; i < 6; i++) {Point3d[] bboxPoints = new Point3d[4];setBoundingBoxSurfacePoints(bboxPoints, vs, i);QuadArray bboxGeo = new QuadArray(4, QuadArray.COORDINATES);bboxGeo.setCoordinate(0, bboxPoints[1]);bboxGeo.setCoordinate(1, bboxPoints[0]);bboxGeo.setCoordinate(2, bboxPoints[2]);bboxGeo.setCoordinate(3, bboxPoints[3]);Shape3D bboxShape = new Shape3D();bboxShape.setGeometry(bboxGeo);bboxShape.setAppearance(getApp());Transform3D transform = new Transform3D();if (translation != null) {transform.setTranslation(new Vector3d(translation));}TransformGroup transformGruppe = new TransformGroup();transformGruppe.setTransform(transform);transformGruppe.addChild(bboxShape);objTransp = new TransparencyAttributes();objTransp.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);objTransp.setTransparencyMode(TransparencyAttributes.BLENDED);BoundingSphere bounds = new BoundingSphere();TransparencyInterpolator traInt = new TransparencyInterpolator(alpha, objTransp, 0, 1);traInt.setSchedulingBounds(bounds);objRoot.addChild(transformGruppe);getApp().setTransparencyAttributes(objTransp);objRoot.addChild(traInt);}}public void startDraw(int i){alpha.setTriggerTime(500 * i);alpha.resume();}// public void hideBox()// {// this.setTransparent(1);// }public void setApp(Appearance app) {this.app = app;}public Appearance getApp() {return app;}public void setTransparent(float trans){this.objTransp.setTransparency(trans);}} 一个JNI的问题请教 用java怎么编写并打印下例数字,谢谢? 求助,SWT中的Composite面板如何滚动 已排序数组,用二分法查找,谁给个例子? java安装的问题 JNI高难问题,如何与c++实现异步通信 十万火急:如何让任务栏图标闪烁 可不可以创建一个磁盘上没有的类? 各位,怎样在jBuilder中将jTable中的数据保存到文件中? 如何自己写Swing的控件? 我的MergeSort(归并排序)有什么错? MySQL MIN函数为什么找到的不是最小的数
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.media.j3d.Alpha;
import javax.media.j3d.BoundingBox;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.*;
import javax.vecmath.Point3d;import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.universe.ViewingPlatform;public class TestBoundingBox {/**
* set coordinates for every surface of the bounding box
*
* @param points
* @param vs
* @param position
*/private Frame frame;private JPanel panel;
private JSlider slider;
private JButton startButton;
private JButton stopButton;private int numberOfPortion;
private int numberOfPortionSum;private SingleBox[] singleBoxes;private Canvas3D canvas3D;
private BoundingBox bbox;
private BranchGroup bg;
private SimpleUniverse simpleU;private int PreDatum;static final int MIN = 0;
static final int INIT = 0;public void discreteCube(BoundingBox bbox, Double factor,
Point3d translation, BranchGroup objRoot, String color,
Integer viewType, int numberOfPortion) {Point3d lower = new Point3d();
bbox.getLower(lower);Point3d upper = new Point3d();
bbox.getUpper(upper);double interval = Math.abs(upper.x - lower.x) / numberOfPortion;
BoundingBox[][][] bb = new BoundingBox[numberOfPortion][numberOfPortion][numberOfPortion];int counter = 0;
for (int i = 0; i < numberOfPortion; i++) {
for (int j = 0; j < numberOfPortion; j++) {
for (int k = 0; k < numberOfPortion; k++) {bb[i][j][k] = new BoundingBox(new Point3d(lower.x + i
* interval, lower.y + j * interval, lower.z + k
* interval), new Point3d(lower.x + (i + 1)
* interval, lower.y + (j + 1) * interval, lower.z
+ (k + 1) * interval));
singleBoxes[counter].drawBox(bb[i][j][k], factor, translation, objRoot,
color, viewType);
counter++;
}
}
}System.out.println("The volume of unit cube is: " + interval * interval
* interval);
System.out.println("The volume of whole cube is: " + interval
* numberOfPortion * interval * numberOfPortion * interval
* numberOfPortion);
}private void setupView(SimpleUniverse universe, Canvas3D canvas,
BoundingSphere bounds) {// add mouse interaction to the ViewingPlatformOrbitBehavior orbit = new OrbitBehavior(canvas,
OrbitBehavior.REVERSE_ALL);orbit.setSchedulingBounds(bounds);ViewingPlatform viewingPlatform = universe.getViewingPlatform();// This will move the ViewPlatform back a bit so the// objects in the scene can be viewed.viewingPlatform.setNominalViewingTransform();viewingPlatform.setViewPlatformBehavior(orbit);}public TestBoundingBox() {PreDatum = -1;
numberOfPortion = 4;
numberOfPortionSum = numberOfPortion * numberOfPortion
* numberOfPortion;singleBoxes = new SingleBox[numberOfPortionSum];for (int i = 0; i < numberOfPortionSum; i++) {
singleBoxes[i] = new SingleBox();
}Point3d min = new Point3d(-1, -1, -1);
Point3d max = new Point3d(1, 1, 1);
bbox = new BoundingBox();
bbox.setLower(min);
bbox.setUpper(max);frame = new Frame("3D Modell");
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();canvas3D = new Canvas3D(config);
canvas3D.setSize(500, 500);
canvas3D.setDoubleBufferEnable(true);
frame.add(canvas3D);panel = new JPanel();slider = new JSlider(JSlider.HORIZONTAL, MIN, numberOfPortion
* numberOfPortion * numberOfPortion - 1, INIT);
slider.addChangeListener(new SliderListener());
slider.setMajorTickSpacing(1);
// slider.setMinorTickSpacing(2);
slider.setPaintTicks(true);
slider.setPaintLabels(true);startButton = new JButton("start");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {System.out.println("start Animation");redo(slider.getValue());// if (PreDatum > -1)
// {
// if(PreDatum > slider.getValue()){
//
// }
// }
//
// for (int i = 0; i < numberOfPortionSum; i++)
// {
// singleBoxes[i].startDraw(0);
// }
//
// for (int i = 0; i < numberOfPortionSum; i++)
// {
// singleBoxes[i].setTransparent(1);
// }// for (int i = 0; i < numberOfPortionSum; i++) {
// singleBoxes[i].setTransparent(1);
// }
// for (int i = 0; i < slider.getValue(); i++)
// {
// singleBoxes[i].startDraw(i);
// }//
// for (int i = 0; i < numberOfPortionSum; i++) {
// //singleBoxes[i].setTransparent(0);
// singleBoxes[i].startDraw(i);
// }
}
});stopButton = new JButton("stop");stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
simpleU.cleanup();
simpleU.getCanvas();
canvas3D.repaint();
// discreteCube(bbox, null, null, bg, "red", null,
// numberOfPortion);
}
});frame.add(panel, BorderLayout.SOUTH);
panel.add(slider, BorderLayout.WEST);
panel.add(startButton);
panel.add(stopButton);simpleU = new SimpleUniverse(canvas3D);
bg = new BranchGroup();discreteCube(bbox, null, null, bg, "red", null, numberOfPortion);
simpleU.addBranchGraph(bg);BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
1000.0);
this.setupView(simpleU, canvas3D, bounds);
simpleU.getViewingPlatform().setNominalViewingTransform();frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent winEvent) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}public class SliderListener implements ChangeListener
{
public void stateChanged(ChangeEvent e)
{System.out.println(slider.getValue());if (PreDatum > -1)
{
if(PreDatum > slider.getValue()){}
}for (int i = 0; i < numberOfPortionSum; i++)
{
singleBoxes[i].startDraw(0);
}for (int i = 0; i < slider.getValue(); i++)
{
singleBoxes[i].setTransparent(0);
}
for (int i = numberOfPortionSum-1; i > slider.getValue(); i--)
{
singleBoxes[i].setTransparent(1);
}
// for (int i = 0; i < slider.getValue(); i++) {
// singleBoxes[i].startDraw(0);
// }}
}public void redo(int datum)
{
// bg = new BranchGroup();
// discreteCube(bbox, null, null, bg, "red", null, numberOfPortion);
// simpleU.addBranchGraph(bg);
//
if (PreDatum > -1)
{
if(PreDatum > datum){}
}for (int i = 0; i < datum; i++)
{
singleBoxes[i].setTransparent(0);
singleBoxes[i].startDraw(i);
}for (int i = numberOfPortionSum-1; i > datum; i--)
{
singleBoxes[i].setTransparent(1);
// singleBoxes[i].startDraw(0);
}}public static void main(String[] args) {
new TestBoundingBox();
}}
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingBox;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.ColoringAttributes;
import javax.media.j3d.Material;
import javax.media.j3d.PolygonAttributes;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.TransparencyAttributes;
import javax.media.j3d.TransparencyInterpolator;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
public class SingleBox {private Alpha alpha;private Appearance app;TransparencyAttributes objTransp;private void setBoundingBoxSurfacePoints(Point3d[] points,
Point3d[][][] vs, int position) {int count = 0;
switch (position) {
case 0:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[0][i][j];count = count + 1;
}
}
count = 0;
break;
case 1:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[1][i][j];
count = count + 1;
}
}
count = 0;
break;
case 2:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[i][0][j];
count = count + 1;
}
}
count = 0;
break;
case 3:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[i][1][j];
count = count + 1;
}
}
count = 0;
break;
case 4:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[i][j][0];
count = count + 1;
}
}
count = 0;
break;
case 5:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
points[count] = vs[i][j][1];
count = count + 1;
}
}
count = 0;
break;
default:
break;
}
}public SingleBox()
{
alpha = new Alpha();
alpha.setLoopCount(1);
alpha.setMode(Alpha.DECREASING_ENABLE);
alpha.setPhaseDelayDuration(200);
alpha.pause();}public void resetBox()
{
alpha.pause();
}public void drawBox(BoundingBox bbox, Double factor,
Point3d translation, BranchGroup objRoot, String color,
Integer viewType) {if (factor == null) {
factor = 1.0d;
}Point3d lower = new Point3d();
bbox.getLower(lower);Point3d upper = new Point3d();
bbox.getUpper(upper);PolygonAttributes pAtt = new PolygonAttributes();
pAtt.setCullFace(PolygonAttributes.CULL_NONE);if (viewType == null) {
pAtt.setPolygonMode(PolygonAttributes.POLYGON_LINE);
} else {
pAtt.setPolygonMode(PolygonAttributes.POLYGON_FILL);
}pAtt.setBackFaceNormalFlip(true);Material mat = new Material();
mat.setDiffuseColor(1.f, 1.f, 0);ColoringAttributes ca_2 = new ColoringAttributes();if (color != null & color.equalsIgnoreCase("red")) {
ca_2.setColor(new Color3f(Color.RED));
}if (color != null & color.equalsIgnoreCase("blue")) {
ca_2.setColor(new Color3f(Color.BLUE));
}if (color != null & color.equalsIgnoreCase("green")) {
ca_2.setColor(new Color3f(Color.GREEN));
}if (color != null & color.equalsIgnoreCase("gray")) {
ca_2.setColor(new Color3f(Color.GRAY));
}if (color != null & color.equalsIgnoreCase("yellow")) {
ca_2.setColor(new Color3f(Color.YELLOW));
}if (color != null & color.equalsIgnoreCase("black")) {
ca_2.setColor(new Color3f(Color.BLACK));
}if (color == null) {
ca_2.setColor(new Color3f(Color.BLUE));
}setApp(new Appearance());
getApp().setColoringAttributes(ca_2);
getApp().setPolygonAttributes(pAtt);
getApp().setMaterial(mat);Point3d[][][] vs = new Point3d[2][2][2];vs[0][0][0] = new Point3d();
vs[0][0][1] = new Point3d();
vs[0][1][0] = new Point3d();
vs[0][1][1] = new Point3d();
vs[1][0][0] = new Point3d();
vs[1][0][1] = new Point3d();
vs[1][1][0] = new Point3d();
vs[1][1][1] = new Point3d();for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
vs[0][i][j].setX(lower.x * factor);
vs[1][i][j].setX(upper.x * factor);
vs[i][0][j].setY(lower.y * factor);
vs[i][1][j].setY(upper.y * factor);
vs[i][j][0].setZ(lower.z * factor);
vs[i][j][1].setZ(upper.z * factor);
}
}for (int i = 0; i < 6; i++) {Point3d[] bboxPoints = new Point3d[4];
setBoundingBoxSurfacePoints(bboxPoints, vs, i);QuadArray bboxGeo = new QuadArray(4, QuadArray.COORDINATES);
bboxGeo.setCoordinate(0, bboxPoints[1]);
bboxGeo.setCoordinate(1, bboxPoints[0]);
bboxGeo.setCoordinate(2, bboxPoints[2]);
bboxGeo.setCoordinate(3, bboxPoints[3]);Shape3D bboxShape = new Shape3D();
bboxShape.setGeometry(bboxGeo);
bboxShape.setAppearance(getApp());
Transform3D transform = new Transform3D();if (translation != null) {
transform.setTranslation(new Vector3d(translation));
}TransformGroup transformGruppe = new TransformGroup();
transformGruppe.setTransform(transform);
transformGruppe.addChild(bboxShape);objTransp = new TransparencyAttributes();
objTransp.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
objTransp.setTransparencyMode(TransparencyAttributes.BLENDED);BoundingSphere bounds = new BoundingSphere();TransparencyInterpolator traInt = new TransparencyInterpolator(
alpha, objTransp, 0, 1);
traInt.setSchedulingBounds(bounds);objRoot.addChild(transformGruppe);
getApp().setTransparencyAttributes(objTransp);
objRoot.addChild(traInt);
}
}public void startDraw(int i)
{
alpha.setTriggerTime(500 * i);
alpha.resume();
}// public void hideBox()
// {
// this.setTransparent(1);
// }public void setApp(Appearance app) {
this.app = app;
}public Appearance getApp() {
return app;
}public void setTransparent(float trans){
this.objTransp.setTransparency(trans);
}
}