菜鸟关于Swing JButton和Java3D结合的一个问题

时间:2023-01-28 15:39:16
我大概是菜鸟中的菜鸟,刚才贴子好象发错版块了,请大家帮忙看一下我的问题,谢谢啦。

我把贴子贴过来了,能不能请管理员帮忙把"Java相关"版块里重复的贴子删除呢?谢谢!

http://topic.csdn.net/u/20091015/14/6cc72f30-1c83-4730-bae8-2124795178f1.html

2 个解决方案

#1


刚学Java一个多月,很多东西都不懂。现在被老师赶着写个程序,要实现4*4*4的小立方体依次出现的效果,还要用JSlider和JButton去控制它。我现在把JSlider那块写完了,可以做到拖动滑块Canvas上出现相应的立方体数。但是Button那里搞不定,我想要的是一按Start动画从头开始,按Stop就停止。请大家帮我看一下,下面是代码,被我写得有点乱。另外,我是新手,分数少得可怜,不好意思。

// TestBoundingBox.java

import 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 ViewingPlatform

OrbitBehavior 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();
}

#2


提示说我帖子太长,下面还有段代码:

// SingleBox.java

import 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);
}

#1


刚学Java一个多月,很多东西都不懂。现在被老师赶着写个程序,要实现4*4*4的小立方体依次出现的效果,还要用JSlider和JButton去控制它。我现在把JSlider那块写完了,可以做到拖动滑块Canvas上出现相应的立方体数。但是Button那里搞不定,我想要的是一按Start动画从头开始,按Stop就停止。请大家帮我看一下,下面是代码,被我写得有点乱。另外,我是新手,分数少得可怜,不好意思。

// TestBoundingBox.java

import 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 ViewingPlatform

OrbitBehavior 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();
}

#2


提示说我帖子太长,下面还有段代码:

// SingleBox.java

import 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);
}