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

📄 60afc9c7e1c5001d1cd1e38dc83e3a87

📁 使用java实现applet插件
💻
字号:
import javax.vecmath.*;

/**
 *
 * @author  Sergei Grichine
 *
 * Copyright (c) 2000-2002 Sergei Grichine     slg@quakemap.com
 *
 * This code was written as a self-study exercise.
 * Permission to use this code for any commercial and non-commercial application is thereby granted by the author.
 * If you use portions of this program in your work, credits to the author and references to original code will be appreciated.
 * The author does not assume responsibility for any damages resulting from using this code.
 * The author is not under obligation to support this code in any form.
 *
 */
public class ControlJPanel extends javax.swing.JPanel implements PositionListener, Runnable
{
  private Thread m_thread;
  private Dem m_dem = null;
  private MainViewJPanel m_mainView = null;

  /** Creates new form ControlJPanel */
  public ControlJPanel() 
  {
    initComponents ();
    m_thread = new Thread(this);
    m_thread.start();
  }

  /** This method is called from within the constructor to
   * initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the FormEditor.
   */
  private void initComponents() {//GEN-BEGIN:initComponents
      asimuthJLabel = new javax.swing.JLabel();
      speedJLabel = new javax.swing.JLabel();
      altitudeJLabel = new javax.swing.JLabel();
      btnOptions = new javax.swing.JButton();
      asimuthGauge = new javax.swing.JLabel();
      speedGauge = new javax.swing.JLabel();
      altitudeGauge = new javax.swing.JLabel();
      btnHelp = new javax.swing.JButton();
      
      setLayout(new java.awt.GridLayout(2, 5));
      
      addComponentListener(new java.awt.event.ComponentAdapter() {
          public void componentShown(java.awt.event.ComponentEvent evt) {
              formComponentShown(evt);
          }
          public void componentHidden(java.awt.event.ComponentEvent evt) {
              formComponentHidden(evt);
          }
      });
      
      asimuthJLabel.setText("Asimuth:");
      asimuthJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      add(asimuthJLabel);
      
      speedJLabel.setText("Speed:");
      speedJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      add(speedJLabel);
      
      altitudeJLabel.setText("Altitude:");
      altitudeJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      add(altitudeJLabel);
      
      btnOptions.setText("Options");
      btnOptions.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              btnOptionsActionPerformed(evt);
          }
      });
      
      add(btnOptions);
      
      asimuthGauge.setText("AsimuthGauge");
      asimuthGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      asimuthGauge.setName("asimuthGage");
      add(asimuthGauge);
      
      speedGauge.setText("SpeedGauge");
      speedGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      speedGauge.setName("speedGauge");
      add(speedGauge);
      
      altitudeGauge.setText("AltitudeGauge");
      altitudeGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      add(altitudeGauge);
      
      btnHelp.setText("Help");
      btnHelp.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              btnHelpActionPerformed(evt);
          }
      });
      
      add(btnHelp);
      
  }//GEN-END:initComponents

  private void btnOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOptionsActionPerformed
      // Add your handling code here:
      new DlgOptions(m_dem, m_mainView).setVisible(true);
  }//GEN-LAST:event_btnOptionsActionPerformed

  private void btnHelpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnHelpActionPerformed
      // Add your handling code here:
      new DlgHelp("overview").setVisible(true);
  }//GEN-LAST:event_btnHelpActionPerformed

  private void formComponentShown (java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
// Add your handling code here:
  }//GEN-LAST:event_formComponentShown

  private void formComponentHidden (java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
// Add your handling code here:
  }//GEN-LAST:event_formComponentHidden


  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JLabel asimuthJLabel;
  private javax.swing.JLabel speedJLabel;
  private javax.swing.JLabel altitudeJLabel;
  private javax.swing.JButton btnOptions;
  private javax.swing.JLabel asimuthGauge;
  private javax.swing.JLabel speedGauge;
  private javax.swing.JLabel altitudeGauge;
  private javax.swing.JButton btnHelp;
  // End of variables declaration//GEN-END:variables

  public void setDem(Dem dem)
  {
    m_dem = dem;
  }
  
  public void setMainView(MainViewJPanel panel)
  {
    m_mainView = panel;
  }
  
  public void setAltitude(Point3d planePos)  // meters
  {
    final double FEET_PER_METER = 0.305;
    double ft = planePos.z / FEET_PER_METER;
    int iAltitudeAbs = (int)ft;
    int iAltitudeRel = iAltitudeAbs;
    int iTerrainHeight = 0;
    if(m_dem != null) {
      iTerrainHeight = (int)(m_dem.getHeight(planePos.x, planePos.y) / FEET_PER_METER);
      iAltitudeRel -= iTerrainHeight;
    }
    altitudeGauge.setText("" + iAltitudeAbs + "=" + iTerrainHeight + "+" + iAltitudeRel  + " ft");
  }

  public void setSpeed(double speed)  // meters per second
  {
    // convert speed to mph:
    double mph = speed * 3600.0 / 1600.0;
    int iSpeed = (int)mph;
    speedGauge.setText("" + iSpeed + " mph");
  }

  public void setAsimuth(double asimuth)  // radians to North
  {
    double grads = asimuth / Math.PI * 360.0;
    int iAsimuth = (int)grads;
    asimuthGauge.setText("" + iAsimuth);
  }

  private double m_distanceTraveled = 0;
  
  public void positionChanged(PositionEvent posEvent)
  {
    Point3d planePos = posEvent.getNewPos();
    double distanceTraveled = posEvent.getDistanceTraveled();
    
    setAltitude(planePos);
    m_distanceTraveled += distanceTraveled;
    Vector3d travel = posEvent.getTravel();
    Vector3d travelXY = new Vector3d(travel.x, travel.y, 0.0);
    Vector3d axisY = new Vector3d(0.0, 1.0, 0.0);
    double asimuth = axisY.angle(travelXY);
    if(travel.x < 0.0) {
      asimuth = -asimuth;
    }
    setAsimuth(asimuth);
  }
  
  public void run()
  {
    while(true) {
      try {
        Thread.sleep(1000);
        // at this moment m_distanceTraveled accumulated meters traveled for the last second.
        setSpeed(m_distanceTraveled);
        m_distanceTraveled = 0.0;
      } catch(Exception e) {
        System.out.println("Exception in run(): " + e);
        e.printStackTrace();
      }
    }
  }
}

⌨️ 快捷键说明

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