View Javadoc

    1   /*
    2    * @(#) Animation3DFrame.java May 10, 2004
    3    *
    4    * Copyright (c) 2002-2005 Delft University of Technology Jaffalaan 5, 2628 BX
    5    * Delft, the Netherlands. All rights reserved.
    6    *
    7    * This software is proprietary information of Delft University of Technology
    8    * The code is published under the Lesser General Public License
    9    */
    10  package nl.tudelft.simulation.dsol.gui.animation3D;
    11
    12  import java.awt.BorderLayout;
    13  import java.awt.Container;
    14  import java.awt.FlowLayout;
    15  import java.awt.event.ActionEvent;
    16  import java.awt.event.ActionListener;
    17
    18  import javax.swing.JButton;
    19  import javax.swing.JFrame;
    20  import javax.swing.JPanel;
    21
    22  import nl.tudelft.simulation.dsol.gui.DSOLApplicationInterface;
    23  import nl.tudelft.simulation.dsol.gui.panels.Statusbar;
    24
    25  /***
    26   * Animation3DFrame, a frame for 3d animation <br>
    27   * (c) copyright 2002-2005 <a href="http://www.simulation.tudelft.nl">Delft
    28   * University of Technology </a>, the Netherlands. <br>
    29   * See for project information <a
    30   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
    31   * License of use: <a href="http://www.gnu.org/copyleft/lesser.html">Lesser
    32   * General Public License (LGPL) </a>, no warranty.
    33   *
    34   * @version $Revision$ $Date$
    35   * @author <a href="http://www.tbm.tudelft.nl/webstaf/royc/index.htm">Roy Chin
    36   *         </a>
    37   */
    38  public final class Animation3DFrame extends JFrame implements ActionListener
    39  {
    40  	/*** This frame */
    41  	private static Animation3DFrame frame = null;
    42
    43  	/*** The application */
    44  	private DSOLApplicationInterface application = null;
    45
    46  	/*** The animation 3d canvas */
    47  	private Animation3DCanvas animation3DPanel = null;
    48
    49  	/*** A home button */
    50  	private JButton homeButton = new JButton("Home");
    51
    52  	/***
    53  	 * Constructs new frame
    54  	 *
    55  	 * @param application DSOL application
    56  	 */
    57  	private Animation3DFrame(final DSOLApplicationInterface application)
    58  	{
    59  		super();
    60  		this.application = application;
    61  		this.animation3DPanel = new Animation3DCanvas(application);
    62  		this.initializeFrame();
    63  	}
    64
    65  	/***
    66  	 * Creates a new instance of this frame or if one already exists, then it
    67  	 * makes it visible.
    68  	 *
    69  	 * @param application DSOLApplicationInterface
    70  	 * @return frame
    71  	 */
    72  	public static JFrame initialize(final DSOLApplicationInterface application)
    73  	{
    74  		if (frame != null)
    75  		{
    76  			frame.setVisible(true);
    77  		} else
    78  		{
    79  			frame = new Animation3DFrame(application);
    80  		}
    81  		return frame;
    82  	}
    83
    84  	/***
    85  	 * Initializes the frame
    86  	 */
    87  	public void initializeFrame()
    88  	{
    89  		// ----------------------
    90  		// Basic frame properties
    91  		this.setTitle("Animation3D");
    92  		this.setSize(640, 480);
    93
    94  		// ------------
    95  		// Button panel
    96  		JPanel bottom = new JPanel();
    97  		bottom.setLayout(new BorderLayout());
    98  		// Add statusbar
    99  		if (this.application != null)
    100 		{
    101 			Statusbar statusbar = new Statusbar(this.application);
    102 			bottom.add(BorderLayout.WEST, statusbar);
    103 		}
    104 		// Add buttons
    105 		JPanel east = new JPanel();
    106 		east.setLayout(new FlowLayout());
    107 		east.add(BorderLayout.EAST, this.homeButton);
    108 		bottom.add(BorderLayout.EAST, east);
    109 		this.homeButton.addActionListener(this);
    110
    111 		// ----------------
    112 		// Setup the window
    113 		Container container = this.getContentPane();
    114 		container.setLayout(new BorderLayout());
    115 		container.add(BorderLayout.CENTER, this.animation3DPanel);
    116 		container.add(BorderLayout.SOUTH, bottom);
    117
    118 		// What to do to exit
    119 		addWindowListener(new java.awt.event.WindowAdapter()
    120 		{
    121 			public void windowClosing(final java.awt.event.WindowEvent evt)
    122 			{
    123 				closeFrame();
    124 			}
    125 		});
    126
    127 		this.setVisible(true);
    128 	}
    129
    130 	/***
    131 	 * Close this frame
    132 	 */
    133 	protected void closeFrame()
    134 	{
    135 		this.setVisible(false);
    136 	}
    137
    138 	/***
    139 	 * @see java.awt.event.ActionListener#actionPerformed
    140 	 *      (java.awt.event.ActionEvent)
    141 	 */
    142 	public void actionPerformed(final ActionEvent event)
    143 	{
    144 		if (event.getSource() == this.homeButton)
    145 		{
    146 			this.animation3DPanel.getViewBranch().resetView();
    147 		}
    148 	}
    149 }