import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import java.awt.*;
import java.io.File;

public class MyJava3 extends JApplet
{ 
   Container contentPane = getContentPane();
   JPanel p1 = new JPanel(new BorderLayout());
   JPanel p2 = new JPanel( );
   JPanel p3 = new JPanel( );

   JPanel topPanel = new JPanel(new FlowLayout());
   JPanel botPanel = new JPanel(new BorderLayout());
   JButton inputFile = new JButton("Input");
   JButton topView = new JButton("TopView");
   JButton sideView = new JButton("sideView");

   JFileChooser chooser = new JFileChooser();

  public void init() 
  {  
   contentPane.setLayout(new BorderLayout());

   //Creating a color cube
   GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
   Canvas3D canvas3D = new Canvas3D(config);
   BranchGroup scene = createSceneGraph();
   scene.compile();
   SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
   simpleU.getViewingPlatform().setNominalViewingTransform();
   simpleU.addBranchGraph(scene);

   //put the canvas into a JPanel, add panel into contentPane
   JPanel classPanel = new JPanel(new BorderLayout());
   JPanel objectPanel = new JPanel(new BorderLayout());
   JTree tree = new JTree();
   JScrollPane sp = new JScrollPane( );
   sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
   sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
   sp.setPreferredSize(new Dimension(250, 250));
   botPanel.add(sp, BorderLayout.WEST);
   JTabbedPane tp = new JTabbedPane(SwingConstants.TOP);
   tp.add(classPanel, "Class");
   tp.add(objectPanel, "Object");
   classPanel.add(canvas3D,BorderLayout.CENTER);
   objectPanel.add(canvas3D,BorderLayout.CENTER);
   botPanel.add(tp, BorderLayout.CENTER);
   p2.add(inputFile, BorderLayout.WEST);
   p2.add(topView, BorderLayout.CENTER);
   p2.add(sideView, BorderLayout.EAST);
   topPanel.add(p1);
   topPanel.add(p2);
   topPanel.add(p3);
   contentPane.add(topPanel, BorderLayout.NORTH);
   contentPane.add(botPanel, BorderLayout.CENTER);
 
   //actionListener for inputFile button, if it is pressed,
   //a dialog window will be popped out
   inputFile.addActionListener(new ActionListener()
   {
    public void actionPerformed(ActionEvent e)
    {
      int state = chooser.showOpenDialog(null);
      File file = chooser.getSelectedFile();

      if(file != null && state == JFileChooser.APPROVE_OPTION)
      {
         JOptionPane.showMessageDialog(null, file.getPath());
      }
      else if(state == chooser.CANCEL_OPTION)
      {
         JOptionPane.showMessageDialog(null, "Canceled");
      }
    }
   });
 
  }//end of MyJava3 constructor

  public BranchGroup createSceneGraph() 
  {
   BranchGroup objRoot = new BranchGroup();
   objRoot.addChild(new ColorCube(0.4));
   return objRoot;
  }

/*  public static void main(String[] args) 
  {
   Frame f  =  new MainFrame(new MyJava3(), 256, 256);
    
  }  
*/
} // end of class MyJava3
