cloudceilingpanel.java

来自「world wind java sdk 源码」· Java 代码 · 共 514 行 · 第 1/2 页

JAVA
514
字号
/*
Copyright (C) 2001, 2009 United States Government as represented by
the Administrator of the National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.applications.sar;

import gov.nasa.worldwind.geom.LatLon;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

/**
 * @author Patrick Murris
 * @version $Id: CloudCeilingPanel.java 8959 2009-02-23 15:44:34Z patrickmurris $
 */
public class CloudCeilingPanel extends JPanel
{
    public static final String CLOUD_CEILING_OPEN = "CloudCeilingPanel.CloudCeilingOpen";
    public static final String CLOUD_CEILING_CHANGE = "CloudCeilingPanel.CloudCeilingChange";

    private CloudCeiling cloudCeiling;
    private SARTrack track;
    private String elevationUnit = SAR2.UNIT_IMPERIAL;

    private JLabel descriptionLabel;
    private JTextField descriptionTextField;
    private JCheckBox enabledCheckBox;
    private JButton colorButton;
    private JLabel baseElevationLabel;
    private JTextField baseElevationTextField;
    private JLabel elevationUnitLabel1;
    private JLabel elevationUnitLabel2;
    private JLabel deltaElevationLabel;
    private JTextField deltaElevationTextField;
    private ButtonGroup deltaModeGroup;
    private JRadioButton deltaPlusRadioButton;
    private JRadioButton deltaMinusRadioButton;
    private JRadioButton deltaBothRadioButton;
    private JLabel segmentsFromLabel;
    private JLabel segmentsToLabel;
    private JSpinner segmentStartSpinner;
    private JSpinner segmentEndSpinner;
    private JButton wholeTrackButton;
    private JLabel incrementLabel;
    private JSpinner incrementSpinner;
    private JButton incrementPlusButton;
    private JButton incrementMinusButton;
    private JButton incrementResetButton;
    private JLabel incrementedBaseLabel;


    public CloudCeilingPanel()
    {
        this.initComponents();
    }

    public CloudCeiling getCloudCeiling()
    {
        return this.cloudCeiling;
    }

    public void setCloudCeiling(CloudCeiling cloudCeiling)
    {
        this.cloudCeiling = cloudCeiling;
        this.updateCloudCeiling();
    }

    public SARTrack getTrack()
    {
        return this.track;
    }

    public void setTrack(SARTrack track)
    {
        this.track = track;
        updateSegmentSpinnersList();
        this.updateCloudCeiling();
    }

    public String getElevationUnit()
    {
        return this.elevationUnit;
    }

    public void setElevationUnit(String elevationUnit)
    {
        if (!this.elevationUnit.equals(elevationUnit))
        {
            this.cloudCeiling.setElevationUnit(elevationUnit);
            double baseElevation = getNumberValue(this.baseElevationTextField.getText());
            double deltaElevation = getNumberValue(this.deltaElevationTextField.getText());
            if (SAR2.UNIT_IMPERIAL.equals(this.elevationUnit))
            {
                baseElevation = SAR2.feetToMeters(baseElevation);
                deltaElevation = SAR2.feetToMeters(deltaElevation);
                this.baseElevationTextField.setText(String.format("%.0f", baseElevation));
                this.deltaElevationTextField.setText(String.format("%.0f", deltaElevation));
                this.elevationUnitLabel1.setText("m");
                this.elevationUnitLabel2.setText("m");
            }
            else
            {
                baseElevation = SAR2.metersToFeet(baseElevation);
                deltaElevation = SAR2.metersToFeet(deltaElevation);
                this.baseElevationTextField.setText(String.format("%.0f", baseElevation));
                this.deltaElevationTextField.setText(String.format("%.0f", deltaElevation));
                this.elevationUnitLabel1.setText("ft");
                this.elevationUnitLabel2.setText("ft");
            }
            this.elevationUnit = elevationUnit;
        }
    }

    private void descriptionTextFieldActionPerformed(ActionEvent event)
    {
        updateCloudCeiling();
    }

    private void enabledCheckBoxActionPerformed(ActionEvent event)
    {
        updateCloudCeiling();
    }

    private void baseElevationTextFieldActionPerformed(ActionEvent event)
    {
        Double baseElevation = getNumberValue(this.baseElevationTextField.getText());
        this.baseElevationTextField.setText(String.format("%.0f", baseElevation));
        this.incrementedBaseLabel.setText(String.format("%.0f", baseElevation));
        updateCloudCeiling();
    }

    private void deltaElevationTextFieldActionPerformed(ActionEvent event)
    {
        this.deltaElevationTextField.setText(String.format("%.0f",
            getNumberValue(this.deltaElevationTextField.getText())));
        updateCloudCeiling();
    }

    private void deltaModeRadioButtonActionPerformed(ActionEvent event) {updateCloudCeiling();}

    private void segmentSpinnerStateChanged(ChangeEvent event)
    {
        int start = Integer.parseInt(((String)this.segmentStartSpinner.getValue()).trim());
        int end = Integer.parseInt(((String)this.segmentEndSpinner.getValue()).trim());
        if (start > end)
            if (event.getSource().equals(this.segmentStartSpinner))
                setSegmentSpinnerValue(this.segmentEndSpinner, start);
            else
                setSegmentSpinnerValue(this.segmentStartSpinner, end);

        updateCloudCeiling();
    }

    private void wholeTrackButtonActionPerformed(ActionEvent event)
    {
        if (this.track != null && this.track.size() > 0)
        {
            setSegmentSpinnerValue(this.segmentStartSpinner, 0);
            setSegmentSpinnerValue(this.segmentEndSpinner, this.track.size() - 1);
            updateCloudCeiling();
        }
    }

    private void incrementButtonActionPerformed(ActionEvent event)
    {
        Double baseElevation;
        if (event.getSource().equals(this.incrementResetButton))
        {
            baseElevation = getNumberValue(this.baseElevationTextField.getText());
        }
        else
        {
            baseElevation = getNumberValue(this.incrementedBaseLabel.getText());
            int step = Integer.parseInt(((String)this.incrementSpinner.getValue()).trim());
            if (event.getSource().equals(this.incrementPlusButton))
                baseElevation += step;
            else
                baseElevation -= step;
        }
        this.incrementedBaseLabel.setText(String.format("%.0f", baseElevation));
        updateCloudCeiling();
    }

    private void colorButtonActionPerformed(ActionEvent event)
    {
        Color c = JColorChooser.showDialog(this, "Choose a color...", ((JButton)event.getSource()).getBackground());
        if (c != null)
        {
            ((JButton)event.getSource()).setBackground(c);
            updateCloudCeiling();
        }
    }

    private Double getNumberValue(String s)
    {
        double value;
        try
        {
            value = Double.parseDouble(s);
        }
        catch (Exception e)
        {
            value = 0;
        }
        return value;
    }

    private void updateSegmentSpinnersList()
    {
        String[] strings = new String[this.track != null ? this.track.size() : 0];

        for (int i = 0; i < strings.length; i++)
            strings[i] = String.format("%,4d", i);

        if (strings.length == 0)
            strings = new String[] {"   0"};

        Object startValue = this.segmentStartSpinner.getValue();
        Object endValue = this.segmentEndSpinner.getValue();
        this.segmentStartSpinner.setModel(new SpinnerListModel(strings));
        this.segmentStartSpinner.setValue(startValue);
        this.segmentEndSpinner.setModel(new SpinnerListModel(strings));
        this.segmentEndSpinner.setValue(endValue);
    }

    private void setSegmentSpinnerValue(JSpinner spinner, int n)
    {
        spinner.setValue(String.format("%,4d", n));
    }

    private void updateCloudCeiling()
    {
        if (this.cloudCeiling == null)
            return;
        // Update cloud ceiling
        this.cloudCeiling.setName(this.descriptionTextField.getText());
        this.cloudCeiling.setEnabled(this.enabledCheckBox.isSelected());
        this.cloudCeiling.setElevationBase(getNumberValue(this.incrementedBaseLabel.getText()));
        this.cloudCeiling.setElevationDelta(getNumberValue(this.deltaElevationTextField.getText()));
        if (this.deltaPlusRadioButton.isSelected())
            this.cloudCeiling.setDeltaMode(CloudCeiling.DELTA_MODE_PLUS);
        else if (this.deltaMinusRadioButton.isSelected())
            this.cloudCeiling.setDeltaMode(CloudCeiling.DELTA_MODE_MINUS);
        else if (this.deltaBothRadioButton.isSelected())
            this.cloudCeiling.setDeltaMode(CloudCeiling.DELTA_MODE_BOTH);
        this.cloudCeiling.setColor(this.colorButton.getBackground());
        // Track positions
        if (this.track != null && this.track.getPositions().size() > 0)
        {
            int start = Integer.parseInt(((String)this.segmentStartSpinner.getValue()).trim());
            int end = Integer.parseInt(((String)this.segmentEndSpinner.getValue()).trim());
            if (end < this.track.getPositions().size() - 1)

⌨️ 快捷键说明

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