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

📄 physics3dframe.java

📁 运用java3D模拟刚体间的碰撞,爆炸及在万有引力作用下的运动轨迹,设置适当的参数可以模拟天体运动等多种物理现象.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		
		
		reverseButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				reverseButtonActionPerformed(e);
			}
		});
		reverseButton.addMouseListener(this);

		stepBackButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				stepBackButtonActionPerformed(e);
			}
		});
		stopButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				stopButtonActionPerformed(e);
			}
		});
		stopButton.addMouseListener(this);
		
		resetParticlesButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				resetParticlesButtonActionPerformed(e);
			}
		});
		resetParticlesButton.addMouseListener(this);
		
		resetViewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				resetViewButtonActionPerformed(e);
			}
		});
		
		resetViewButton.addMouseListener(this);
		
		fileMenuNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuNewActionPerformed(e);
			}
		});
		fileMenuSave.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuSaveActionPerformed(e);
			}
		});
		fileMenuSaveAs.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuSaveAsActionPerformed(e);
			}
		});
		fileMenuOpen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuOpenActionPerformed(e);
			}
		});
		fileMenuPrint.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuPrintActionPerformed(e);
			}
		});
		fileMenuQuit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileMenuQuitActionPerformed(e);
			}
		});
		jMenuEditSettings.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jMenuEditSettingsActionPerformed(e);
			}
		});
		jMenuTrackersCreateTimeTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateTimeTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreatePositionTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreatePositionTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreateVelocityTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateVelocityTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreateMomentumTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateMomentumTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreateKineticEnergyTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateKineticEnergyTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreateOrientationTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateOrientationTrackerActionPerformed(e);
			}
		});
		jMenuTrackersCreateAngularVelocityTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateAngularVelocityTrackerActionPerformed(e);
			}
		});
		
		jMenuTrackersCreateDistanceTracker.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateDistanceTrackerActionPerformed(e);
			}
		});
		jMenuToolsCreateRandomParticleGrid.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CreateRandomParticleGridActionPerformed(e);
			}
		});
		jMenuHelpAbout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				HelpAboutActionPerformed(e);
			}
		});
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				thisWindowClosing(e);
			}
		});


	//Give the Properties frame a reference to this frame for positioning purposes
	PropertiesFrame.mainFrame = this;
	
	
		
	//Setup Canvas3D and Simple Universe
	Dimension screenSize = getToolkit().getScreenSize();
	setLocation(((int)screenSize.getWidth() / 2) - (this.getWidth() / 2), ((int)screenSize.getHeight() / 2) - (this.getHeight() / 2));
	c = new Canvas3D(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getBestConfiguration(new GraphicsConfigTemplate3D()));
	offScreenCanvas3D = new OffScreenCanvas3D(SimpleUniverse.getPreferredConfiguration(), true);
	
	// Set the off-screen size based on a scale factor times the
	// on-screen size
	Screen3D sOn = c.getScreen3D();
	Screen3D sOff = offScreenCanvas3D.getScreen3D();
	Dimension dim = sOn.getSize();
	sOff.setSize(dim);
	sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth());
	sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight());
	
	//Create the Universe
	SimpleUniverse u = new SimpleUniverse(c);
	
	//Add the canvas to the main panel
	main3DPanel.add(u.getCanvas());

	// attach the offscreen canvas to the view
    u.getViewer().getView().addCanvas3D(offScreenCanvas3D);
	
	//Create the Main Thread
	t = new Physics3DThread(u, this);
	
	//Add the Thread Orbit Behavior to the Canvas
	c.addMouseListener(t);
	
	//Set the default view
	t.setView(10);
	
	//Start up the Main Thread
	t.start();
	
/////////////////////////////////////

		
		
	}

	// Close the window when the close box is clicked
	void thisWindowClosing(java.awt.event.WindowEvent e) {
		t.stopMe();
		setVisible(false);
		dispose();
		System.exit(0);
	}
	
	public void addParticleButtonActionPerformed(java.awt.event.ActionEvent e) {
		
		t.addParticle();
	
	}
	
	public void startButtonActionPerformed(java.awt.event.ActionEvent e) {
		t.setRewind(false);
		statusLabel.setText("Simulating. Press Stop to continue");
		disable();
		t.setAnimating(true);
	}
	
	public void reverseButtonActionPerformed(java.awt.event.ActionEvent e) {
		t.setRewind(true);
		statusLabel.setText("Simulating. Press Stop to continue");
		disable();
		t.setAnimating(true);
	
	}

	public void stopButtonActionPerformed(java.awt.event.ActionEvent e) {
		statusLabel.setText("Ready");
		enable();
		t.setAnimating(false);
	
	}
	
	public void stepForwardButtonActionPerformed(java.awt.event.ActionEvent e) {
		t.setRewind(false);
		statusLabel.setText("Stepping. Please Wait...");
		disable();
		stopButton.setEnabled(false);
		t.step();
		enable();
	}


	public void stepBackButtonActionPerformed(java.awt.event.ActionEvent e) {
		t.setRewind(true);
		statusLabel.setText("Stepping. Please Wait...");
		disable();
		stopButton.setEnabled(false);
		t.step();
		statusLabel.setText("Ready");
		enable();
		
	}
	
	public void enable()
	{
		statusLabel.setText("Ready");
		startButton.setEnabled(true);
		stepForwardButton.setEnabled(true);
		stepBackButton.setEnabled(true);
		reverseButton.setEnabled(true);
		stopButton.setEnabled(false);
		addParticleButton.setEnabled(true);
		removeButton.setEnabled(true);
		resetParticlesButton.setEnabled(true);
		fileMenu.setEnabled(true);
		t.setAnimating(false);
	}
	
	public void disable()
	{
		statusLabel.setText("Simulating. Press Stop to continue");
		startButton.setEnabled(false);
		stepForwardButton.setEnabled(false);
		stepBackButton.setEnabled(false);
		reverseButton.setEnabled(false);
		stopButton.setEnabled(true);
		addParticleButton.setEnabled(false);
		removeButton.setEnabled(false);
		resetParticlesButton.setEnabled(false);
		fileMenu.setEnabled(false);
	}
	
	public void resetViewButtonActionPerformed(java.awt.event.ActionEvent e) {
		double zoomDistance;
		try
		{
			String result = (String)JOptionPane.showInputDialog("Zoom Distance?", "10");
			if(result == null)
				return;
				
			zoomDistance =  Double.parseDouble(result);
			t.setView(zoomDistance);
		}
		catch(Exception exp)
		{
			
			JOptionPane.showMessageDialog(this, "Error: You did not input a number. Please Try Again.", 
											"Error!",  JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	
	public void resetParticlesButtonActionPerformed(java.awt.event.ActionEvent e) {
		
		Particle3D.resetAll();
		t.pframe.reset();
		
	}
	
	
	public void fileMenuQuitActionPerformed(java.awt.event.ActionEvent e) {
	
		t.stopMe();
		setVisible(false);
		dispose();
		System.exit(0);
		
	}
	
	public void jMenuEditSettingsActionPerformed(java.awt.event.ActionEvent e) {
		try
		{
			SettingsFrame sframe = new SettingsFrame(this);
			sframe.initComponents();
			sframe.setVisible(true);
		}
		catch(Exception exp)
		{
		
		}
	
	}
	
	public void removeButtonActionPerformed(java.awt.event.ActionEvent e) {
		t.removeSelectedObject();
	}
	
	
	
	public void fileMenuSaveActionPerformed(java.awt.event.ActionEvent e) {
		
		try
		{
			if(fileName != null)
			{
				BufferedWriter b = new BufferedWriter(new FileWriter(fileName));	
				Particle3D.saveAll(b);
				b.close();
			}
			else
			{
				chooser = new JFileChooser();
				
				ExampleFileFilter filter = new ExampleFileFilter();
   				filter.addExtension("p3d");
    			filter.setDescription("Physics 3D Files");
   				chooser.setFileFilter(filter);
				
				//Get the new file
				int fileChooserReturn = chooser.showSaveDialog(this);
				//If the user said ok save the colony to the selected file
				if(fileChooserReturn == JFileChooser.APPROVE_OPTION)
				{
					fileName = chooser.getSelectedFile();
					if(!fileName.getName().endsWith(".p3d"))
						fileName = new File(fileName.getAbsolutePath() + ".p3d");
						
					BufferedWriter b = new BufferedWriter(new FileWriter(fileName));	
					Particle3D.saveAll(b);
					b.close();
					this.setTitle("Physics 3D - " + fileName.getName());
				}
			}
				
		}
		//If there is an error writing to the file, show an error dialog
		catch(IOException exc)

⌨️ 快捷键说明

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