⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 physics3dframe.java

📁 运用java3D模拟刚体间的碰撞,爆炸及在万有引力作用下的运动轨迹,设置适当的参数可以模拟天体运动等多种物理现象.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/***************************************************

Copyright 2003 Ben Childs


This file is part of Physics 3D.

    Physics 3D is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    Physics 3D is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Physics 3D; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA




***************************************************/

package com.bchilds.Physics3D;

//Java3D Imports
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import javax.vecmath.*;
///////////////////////

//UI Imports
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;
//////////////////////////

public class Physics3DFrame extends javax.swing.JFrame implements Printable, MouseListener {


//Codewarrior RAD stuff....

	//Main Panels
	JPanel main3DPanel = new JPanel();
	JPanel buttonPanel = new JPanel();
	JPanel statusPanel = new JPanel();
	///////////////////////////
	
	//Main Toolbar Buttons
	JButton addParticleButton = new JButton();
	JButton removeButton = new JButton();
	JButton stepForwardButton = new JButton();
	JButton startButton = new JButton();
	JButton reverseButton = new JButton();
	JButton stepBackButton = new JButton();
	JButton stopButton = new JButton();
	JButton resetParticlesButton = new JButton();
	JButton resetViewButton = new JButton();
	////////////////////////////////
	
	//Menu's
	private JMenuBar mainMenu = new JMenuBar();
	private JMenu fileMenu = new JMenu();
	private JMenuItem fileMenuNew = new JMenuItem();
	private JMenuItem fileMenuSave = new JMenuItem();
	private JMenuItem fileMenuSaveAs = new JMenuItem();
	private JMenuItem fileMenuOpen = new JMenuItem();
	private JMenuItem fileMenuPrint = new JMenuItem();
	private JMenuItem fileMenuQuit = new JMenuItem();
	private JMenu jMenuEdit = new JMenu();
	private JMenuItem jMenuEditSettings = new JMenuItem();
	private JMenu jMenuTools = new JMenu();
	private JMenu jMenuToolsTrackers = new JMenu();
	private JMenuItem jMenuTrackersCreateTimeTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreatePositionTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateVelocityTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateMomentumTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateKineticEnergyTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateDistanceTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateOrientationTracker = new JMenuItem();
	private JMenuItem jMenuTrackersCreateAngularVelocityTracker = new JMenuItem();

	
	private JMenuItem jMenuToolsCreateRandomParticleGrid = new JMenuItem();
	
	
	
	private JMenu jMenuHelp = new JMenu();
	private JMenuItem jMenuHelpAbout = new JMenuItem();
	////////////////////////////////////////////////////
	
	//File Chooser for loading/saving
	private JFileChooser chooser;
	
	//Current Filename
	private File fileName = null;
	
	//Status Label
	JLabel statusLabel = new JLabel();
	///////////////

	//Main simulation thread
	Physics3DThread t = null;
	
	//Main Canvas3D
	private Canvas3D c;
	
	//OffScreen Canvas for Printing
	private OffScreenCanvas3D offScreenCanvas3D;

	public Physics3DFrame() {
	}

	public void initComponents() throws Exception {
		
		JSeparator fileMenuSeparator2 = new JSeparator();
		JSeparator fileMenuSeparator3 = new JSeparator();
		JSeparator fileMenuSeparator1 = new JSeparator();
		JSeparator fileMenuSeparator4 = new JSeparator();
		
		//Load Images for the Toolbar/Icon
		Image img0 = getToolkit().getImage(ClassLoader.getSystemResource("physics3d.gif"));
		Image img1 = getToolkit().getImage(ClassLoader.getSystemResource("add.gif"));
		Image img2 = getToolkit().getImage(ClassLoader.getSystemResource("remove.gif"));
		Image img3 = getToolkit().getImage(ClassLoader.getSystemResource("stepForward.gif"));
		Image img4 = getToolkit().getImage(ClassLoader.getSystemResource("start.gif"));
		Image img5 = getToolkit().getImage(ClassLoader.getSystemResource("reverse.gif"));
		Image img6 = getToolkit().getImage(ClassLoader.getSystemResource("stepBack.gif"));
		Image img7 = getToolkit().getImage(ClassLoader.getSystemResource("stop.gif"));
		Image img8 = getToolkit().getImage(ClassLoader.getSystemResource("rewind.gif"));
		Image img9 = getToolkit().getImage(ClassLoader.getSystemResource("view.gif"));
		////////////////////////////////////////////////////////////
		
		main3DPanel.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
		main3DPanel.setLayout(new BorderLayout(0, 0));
		main3DPanel.setVisible(true);
		
		buttonPanel.setBorder(new javax.swing.plaf.BorderUIResource.EtchedBorderUIResource(1, Color.white, new Color(142, 142, 142)));
		buttonPanel.setLayout(new BoxLayout(buttonPanel, 1));
		buttonPanel.setVisible(true);
		
		addParticleButton.setIcon(new ImageIcon(img1));
		addParticleButton.setMargin(new Insets(0, 0, 0, 0));
		addParticleButton.setToolTipText("Add Particle");
		addParticleButton.setVisible(true);
		
		removeButton.setIcon(new ImageIcon(img2));
		removeButton.setMargin(new Insets(0, 0, 0, 0));
		removeButton.setToolTipText("Remove Selected Object");
		removeButton.setVisible(true);
		
		stepForwardButton.setIcon(new ImageIcon(img3));
		stepForwardButton.setMargin(new Insets(0, 0, 0, 0));
		stepForwardButton.setToolTipText("Step one step forward");
		stepForwardButton.setVisible(true);
		
		startButton.setIcon(new ImageIcon(img4));
		startButton.setMargin(new Insets(0, 0, 0, 0));
		startButton.setToolTipText("Start Animation");
		startButton.setVisible(true);
		
		reverseButton.setIcon(new ImageIcon(img5));
		reverseButton.setMargin(new Insets(0, 0, 0, 0));
		reverseButton.setToolTipText("Start Animation in Reverse");
		reverseButton.setVisible(true);
		
		stepBackButton.setIcon(new ImageIcon(img6));
		stepBackButton.setMargin(new Insets(0, 0, 0, 0));
		stepBackButton.setToolTipText("Step one step back");
		stepBackButton.setVisible(true);
		
		stopButton.setEnabled(false);
		stopButton.setIcon(new ImageIcon(img7));
		stopButton.setMargin(new Insets(0, 0, 0, 0));
		stopButton.setToolTipText("Stop Animation");
		stopButton.setVisible(true);
		
		resetParticlesButton.setIcon(new ImageIcon(img8));
		resetParticlesButton.setMargin(new Insets(0, 0, 0, 0));
		resetParticlesButton.setToolTipText("Reset Particles - Does not include exploded ones.");
		resetParticlesButton.setVisible(true);
		
		resetViewButton.setIcon(new ImageIcon(img9));
		resetViewButton.setMargin(new Insets(0, 0, 0, 0));
		resetViewButton.setToolTipText("Reset View");
		resetViewButton.setVisible(true);
		
		mainMenu.setVisible(true);
		
		fileMenu.setText("File");
		fileMenu.setVisible(true);
		
		fileMenuNew.setText("New");
		fileMenuNew.setVisible(true);
		
		fileMenuSeparator2.setVisible(true);
		
		fileMenuSave.setText("Save");
		fileMenuSave.setVisible(true);
		
		fileMenuSaveAs.setText("Save As");
		fileMenuSaveAs.setVisible(true);
		
		fileMenuSeparator3.setVisible(true);
		
		fileMenuOpen.setText("Open");
		fileMenuOpen.setVisible(true);
		
		fileMenuSeparator1.setVisible(true);
		
		fileMenuPrint.setText("Print");
		fileMenuPrint.setVisible(true);
		
		fileMenuSeparator4.setVisible(true);
		
		fileMenuQuit.setText("Quit");
		fileMenuQuit.setVisible(true);
		
		jMenuEdit.setText("Edit");
		jMenuEdit.setVisible(true);
		
		jMenuEditSettings.setText("Settings");
		jMenuEditSettings.setVisible(true);
		
		jMenuTools.setText("Tools");
		jMenuTools.setVisible(true);
		
		jMenuToolsTrackers.setText("Trackers");
		jMenuToolsTrackers.setVisible(true);
		
		jMenuTrackersCreateTimeTracker.setText("Create Time Tracker");
		jMenuTrackersCreateTimeTracker.setVisible(true);
		
		jMenuTrackersCreatePositionTracker.setText("Create Position Tracker");
		jMenuTrackersCreatePositionTracker.setToolTipText("Tracks a Particles Position");
		jMenuTrackersCreatePositionTracker.setVisible(true);
		
		jMenuTrackersCreateVelocityTracker.setText("Create Velocity Tracker");
		jMenuTrackersCreateVelocityTracker.setVisible(true);
		
		jMenuTrackersCreateMomentumTracker.setText("Create Momentum Tracker");
		jMenuTrackersCreateMomentumTracker.setVisible(true);
		
		jMenuTrackersCreateKineticEnergyTracker.setText("Create Kinetic Energy Tracker");
		jMenuTrackersCreateKineticEnergyTracker.setVisible(true);
		
		jMenuTrackersCreateDistanceTracker.setText("Create Distance Tracker");
		jMenuTrackersCreateDistanceTracker.setVisible(true);
		
		jMenuTrackersCreateOrientationTracker.setText("Create Orienation Tracker");
		jMenuTrackersCreateOrientationTracker.setVisible(true);
		
		jMenuTrackersCreateAngularVelocityTracker.setText("Create Angular Velocity Tracker");
		jMenuTrackersCreateAngularVelocityTracker.setVisible(true);
		
		jMenuToolsCreateRandomParticleGrid.setText("Create Random Particle Grid");
		jMenuToolsCreateRandomParticleGrid.setVisible(true);
		
		jMenuHelp.setText("Help");
		jMenuHelp.setVisible(true);
		
		jMenuHelpAbout.setText("About");
		jMenuHelpAbout.setVisible(true);
		
		statusPanel.setLayout(new BorderLayout());
		statusPanel.setVisible(true);
		
		statusLabel.setBorder(new javax.swing.plaf.BorderUIResource.EtchedBorderUIResource(0, Color.white, new Color(142, 142, 142)));
		statusLabel.setLocation(new Point(0, 0));
		statusLabel.setSize(new Dimension(358, 477));
		statusLabel.setText("Ready");
		statusLabel.setVisible(true);
		
		setJMenuBar(mainMenu);
		setIconImage(img0);
		getContentPane().setLayout(new BorderLayout(0, 0));
		setLocation(new Point(0, 0));
		setTitle("Physics3D");

		buttonPanel.add(addParticleButton);
		buttonPanel.add(removeButton);
		buttonPanel.add(stepForwardButton);
		buttonPanel.add(startButton);
		buttonPanel.add(reverseButton);
		buttonPanel.add(stepBackButton);
		buttonPanel.add(stopButton);
		buttonPanel.add(resetParticlesButton);
		buttonPanel.add(resetViewButton);
		
		mainMenu.add(fileMenu);
		mainMenu.add(jMenuEdit);
		mainMenu.add(jMenuTools);
		mainMenu.add(jMenuHelp);
		fileMenu.add(fileMenuNew);
		fileMenu.add(fileMenuSeparator2);
		fileMenu.add(fileMenuSave);
		fileMenu.add(fileMenuSaveAs);
		fileMenu.add(fileMenuSeparator3);
		fileMenu.add(fileMenuOpen);
		fileMenu.add(fileMenuSeparator1);
		fileMenu.add(fileMenuPrint);
		fileMenu.add(fileMenuSeparator4);
		fileMenu.add(fileMenuQuit);
		jMenuEdit.add(jMenuEditSettings);
		jMenuTools.add(jMenuToolsTrackers);
		jMenuTools.add(jMenuToolsCreateRandomParticleGrid);
		jMenuToolsTrackers.add(jMenuTrackersCreateTimeTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreatePositionTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateVelocityTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateMomentumTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateKineticEnergyTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateOrientationTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateAngularVelocityTracker);
		jMenuToolsTrackers.add(jMenuTrackersCreateDistanceTracker);
		jMenuHelp.add(jMenuHelpAbout);
		
		statusPanel.add(statusLabel);
		
		getContentPane().add(main3DPanel, "Center");
		getContentPane().add(buttonPanel, "West");
		getContentPane().add(statusPanel, "South");

		setSize(new java.awt.Dimension(800, 600));

		// event handling
		addParticleButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				addParticleButtonActionPerformed(e);
			}
		});
		addParticleButton.addMouseListener(this);
		
		removeButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				removeButtonActionPerformed(e);
			}
		});
		
		removeButton.addMouseListener(this);
		
		stepForwardButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				stepForwardButtonActionPerformed(e);
			}
		});
		
		startButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				startButtonActionPerformed(e);
			}
		});
		
		startButton.addMouseListener(this);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -