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