📄 physics3dframe.java
字号:
/***************************************************
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 + -