trackviewpanel.java

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

JAVA
783
字号
                        // enough space inside this segment                        curDelta += distanceToGo / segmentLength;                        setPositionDelta(positionNumber, curDelta);                        distanceToGo = 0;                    }                    else                    {                        // move to next segment                        if (!this.isLastPosition(positionNumber + 1))                        {                            distanceToGo -= segmentLength * (1d - curDelta);                            positionNumber++;                            curDelta = 0;                        }                        else                        {                            // reached end of track                            setPositionDelta(positionNumber + 1, 0);                            this.playMode = PLAY_STOP;                            break;                        }                    }                }                this.firePropertyChange(POSITION_CHANGE, -1, 0);            }        }        else if (this.playMode == PLAY_BACKWARD)        {            this.stopButton.setEnabled(true);            if (positionNumber <= 0 && curDelta <= 0)            {                setPositionDelta(0, 0);                this.playMode = PLAY_STOP;            }            else            {                double distanceToGo = computeDistanceToGo(speedKMH);                while (distanceToGo > 0)                {                    double segmentLength = this.analysisPanel.getSegmentLength(positionNumber);                    if (segmentLength * curDelta - distanceToGo >= 0)                    {                        // enough space inside this segment                        curDelta -= distanceToGo / segmentLength;                        setPositionDelta(positionNumber, curDelta);                        distanceToGo = 0;                    }                    else                    {                        // move to previous segment                        if (positionNumber > 0)                        {                            distanceToGo -= segmentLength * curDelta;                            positionNumber--;                            curDelta = 1;                        }                        else                        {                            // reached start of track                            setPositionDelta(0, 0);                            this.playMode = PLAY_STOP;                            break;                        }                    }                }                this.firePropertyChange(POSITION_CHANGE, -1, 0);            }        }    }    private double computeDistanceToGo(double speedKMH)    {        long stepTime = System.nanoTime();        double distance = 0;        if (this.previousStepTime > 0)        {            double ellapsedMillisec = (stepTime - this.previousStepTime) / 1e6;            distance = speedKMH / 3600d * ellapsedMillisec; // meters        }        this.previousStepTime = stepTime;        return distance;    }    private void initComponents()    {        //======== this ========        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));        //======== "View" Section ========        Box viewPanel = Box.createVerticalBox();        {            //viewBox.setBorder(new EmptyBorder(5, 10, 12, 5));            viewPanel.setBorder(new CompoundBorder(                new TitledBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GRAY), "View"),                new EmptyBorder(5, 5, 5, 5)));            //======== View Mode Panel ========            Box modePanel = Box.createHorizontalBox();            modePanel.setAlignmentX(Component.LEFT_ALIGNMENT);            {                //---- "Subsurface" Button ----                this.subsurfaceButton = new JCheckBox();                this.subsurfaceButton.setText("Subsurface");                this.subsurfaceButton.addItemListener(new ItemListener() {                    public void itemStateChanged(ItemEvent e) {                        subsurfaceButtonItemStateChanged();                    }                });                modePanel.add(this.subsurfaceButton);                modePanel.add(Box.createHorizontalStrut(20));                //---- "EXAMINE" Button ----                this.examineButton = new JRadioButton();                this.examineButton.setText("EXAMINE");                this.examineButton.setHorizontalAlignment(SwingConstants.CENTER);                this.examineButton.setEnabled(false);                this.examineButton.addItemListener(new ItemListener() {                    public void itemStateChanged(ItemEvent e) {                        examineButtonItemStateChanged();                    }                });                modePanel.add(this.examineButton);                modePanel.add(Box.createHorizontalStrut(20));                //---- "FLY-IT" Button ----                this.followButton = new JRadioButton();                this.followButton.setText("FLY-IT");                this.followButton.setHorizontalAlignment(SwingConstants.CENTER);                this.followButton.setEnabled(false);                this.followButton.addItemListener(new ItemListener() {                    public void itemStateChanged(ItemEvent e) {                        followButtonItemStateChanged();                    }                });                modePanel.add(this.followButton);                modePanel.add(Box.createHorizontalStrut(20));                //---- "FREE" Button ----                this.freeButton = new JRadioButton();                this.freeButton.setText("FREE");                this.freeButton.setSelected(true);                this.freeButton.setHorizontalAlignment(SwingConstants.CENTER);                this.freeButton.addItemListener(new ItemListener() {                    public void itemStateChanged(ItemEvent e) {                        freeButtonItemStateChanged();                    }                });                modePanel.add(this.freeButton);                //--------                modePanel.add(Box.createHorizontalGlue());                //---- View Mode ButtonGroup ----                ButtonGroup viewModeButtonGroup = new ButtonGroup();                viewModeButtonGroup.add(this.examineButton);                viewModeButtonGroup.add(this.followButton);                viewModeButtonGroup.add(this.freeButton);            }            viewPanel.add(modePanel);            viewPanel.add(Box.createVerticalStrut(10));            //======== Clip Control Panel ========            Box clipPanel = Box.createHorizontalBox();            clipPanel.setAlignmentX(Component.LEFT_ALIGNMENT);            {                //---- "Override Clip Distance" Button ----                this.overrideClipDistanceButton = new JCheckBox();                this.overrideClipDistanceButton.setText("Override Clip Distance:");                this.overrideClipDistanceButton.addItemListener(new ItemListener() {                    public void itemStateChanged(ItemEvent e) {                        overrideClipDistanceButtonStateChanged();                    }                });                clipPanel.add(this.overrideClipDistanceButton);                clipPanel.add(Box.createHorizontalStrut(3));                int minDistance = 10;                int maxDistance = 100000;                this.clipDistanceSlider = new JSlider();                this.clipDistanceSlider.setMinimum(minDistance);                this.clipDistanceSlider.setMaximum(maxDistance);                this.clipDistanceSlider.setValue(minDistance + (maxDistance - minDistance) / 2);                this.clipDistanceSlider.addChangeListener(new ChangeListener() {                    public void stateChanged(ChangeEvent event) {                        clipDistanceStateChanged();                    }                });                clipPanel.add(this.clipDistanceSlider);            }            //viewPanel.add(clipPanel);        }        add(viewPanel);        //======== "Position" Section ========        Box positionPanel = Box.createVerticalBox();        positionPanel.setBorder(new CompoundBorder(                new TitledBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GRAY), "Position"),                new EmptyBorder(5, 5, 5, 5)));        {            //======== Position Readout ========            JPanel readoutPanel = new JPanel();            readoutPanel.setAlignmentX(Component.LEFT_ALIGNMENT);            readoutPanel.setLayout(new GridLayout(1, 3));            {                //======== Latitude ========                Box lat = Box.createHorizontalBox();                {                    this.latLabel = new JLabel();                    this.latLabel.setText("Lat:");                    lat.add(this.latLabel);                    lat.add(Box.createHorizontalStrut(3));                    this.latReadout = new JLabel();                    this.latReadout.setText("-90.0000");                    lat.add(this.latReadout);                    lat.add(Box.createHorizontalGlue());                                    }                readoutPanel.add(lat);                //======== Longitude ========                Box lon = Box.createHorizontalBox();                {                    this.lonLabel = new JLabel();                    this.lonLabel.setText("Lon:");                    lon.add(this.lonLabel);                    lon.add(Box.createHorizontalStrut(3));                    //---- lonReadout ----                    this.lonReadout = new JLabel();                    this.lonReadout.setText("-180.0000");                    lon.add(this.lonReadout);                    lon.add(Box.createHorizontalGlue());                }                readoutPanel.add(lon);                //======== Altitude ========                Box alt = Box.createHorizontalBox();                {                    this.altLabel = new JLabel();                    this.altLabel.setText("Alt:");                    alt.add(this.altLabel);                    alt.add(Box.createHorizontalStrut(3));                    this.altReadout = new JLabel();                    this.altReadout.setText("50,000.000");                    alt.add(this.altReadout);                    alt.add(Box.createHorizontalGlue());                }                readoutPanel.add(alt);            }            positionPanel.add(readoutPanel);            positionPanel.add(Box.createVerticalStrut(5));            //======== Position Spinner, Slider ========            JPanel positionControlPanel = new JPanel();            positionControlPanel.setAlignmentX(Component.LEFT_ALIGNMENT);            positionControlPanel.setLayout(new BorderLayout(10, 0));            {                //---- Position Spinner ----                this.positionSpinner = new JSpinner();                this.positionSpinner.setModel(new SpinnerListModel(new String[] {"   0"}));                this.positionSpinner.setEnabled(false);                this.positionSpinner.addChangeListener(new ChangeListener() {                    public void stateChanged(ChangeEvent e) {                        positionSpinnerStateChanged();                    }                });                positionControlPanel.add(this.positionSpinner, BorderLayout.WEST);                //---- Position Slider ----                this.positionSlider = new JSlider();                this.positionSlider.setMaximum(1000);                this.positionSlider.setValue(0);                this.positionSlider.setEnabled(false);                this.positionSlider.addChangeListener(new ChangeListener() {                    public void stateChanged(ChangeEvent e) {                        positionSliderStateChanged();                    }                });                positionControlPanel.add(this.positionSlider, BorderLayout.CENTER);            }            positionPanel.add(positionControlPanel);            positionPanel.add(Box.createVerticalStrut(10));            //======== "VCR" Panel ========            Box vcrPanel = Box.createHorizontalBox();            vcrPanel.setAlignmentX(Component.LEFT_ALIGNMENT);            {                vcrPanel.add(Box.createHorizontalGlue());                //---- "<<" Button ----                this.fastReverseButton = new JButton();                this.fastReverseButton.setText("<<");                this.fastReverseButton.setEnabled(false);                this.fastReverseButton.addActionListener(new ActionListener() {                    public void actionPerformed(ActionEvent e) {                        fastReverseButtonActionPerformed();                    }                });                vcrPanel.add(this.fastReverseButton);                vcrPanel.add(Box.createHorizontalStrut(3));                //---- "<" Button----                this.reverseButton = new JButton();                this.reverseButton.setText("<");                this.reverseButton.setEnabled(false);                this.reverseButton.addActionListener(new ActionListener() {                    public void actionPerformed(ActionEvent e) {                        reverseButtonActionPerformed();                    }                });                vcrPanel.add(this.reverseButton);                vcrPanel.add(Box.createHorizontalStrut(3));                //---- "Stop" Button ----                this.stopButton = new JButton();                this.stopButton.setText("Stop");                this.stopButton.setEnabled(false);                this.stopButton.addActionListener(new ActionListener() {                    public void actionPerformed(ActionEvent e) {                        stopButtonActionPerformed();                    }                });                vcrPanel.add(this.stopButton);                vcrPanel.add(Box.createHorizontalStrut(3));                //---- ">" Button ----                this.forwardButton = new JButton();                this.forwardButton.setText(">");                this.forwardButton.setBorder(UIManager.getBorder("Button.border"));                this.forwardButton.setEnabled(false);                this.forwardButton.addActionListener(new ActionListener() {                    public void actionPerformed(ActionEvent e) {                        forwardButtonActionPerformed();                    }                });                vcrPanel.add(this.forwardButton);                vcrPanel.add(Box.createHorizontalStrut(3));                //---- ">>" Button ----                this.fastForwardButton = new JButton();                this.fastForwardButton.setText(">>");                this.fastForwardButton.setEnabled(false);                this.fastForwardButton.addActionListener(new ActionListener() {                    public void actionPerformed(ActionEvent e) {                        fastForwardButtonActionPerformed();                    }                });                vcrPanel.add(this.fastForwardButton);                //--------                vcrPanel.add(Box.createHorizontalGlue());            }            positionPanel.add(vcrPanel);            positionPanel.add(Box.createVerticalStrut(10));            //======== "Speed" Panel ========            Box speedPanel = Box.createHorizontalBox();            speedPanel.setAlignmentX(Component.LEFT_ALIGNMENT);            {                //---- "Speed:" Label ----                this.speedLabel = new JLabel();                this.speedLabel.setText("Speed:");                speedPanel.add(this.speedLabel);                speedPanel.add(Box.createHorizontalStrut(10));                //---- Speed Spinner ----                int numValues = 100;                String[] speedValues = new String[numValues];                for (int i = 1; i <= numValues; i++)                    speedValues[i - 1] = "" + (i * 10);                this.speedSpinner = new JSpinner();                this.speedSpinner.setModel(new SpinnerListModel(speedValues));                this.speedSpinner.setValue("200");                this.speedSpinner.setEnabled(false);                speedPanel.add(this.speedSpinner);                speedPanel.add(Box.createHorizontalStrut(10));                //---- Speed Multiplier Spinner ----                this.speedFactorSpinner = new JSpinner();                this.speedFactorSpinner.setModel(new SpinnerListModel(                    new String[] {"x.12", "x.25", "x.50", "x1", "x2", "x3", "x4", "x5", "x7", "x10"}));                this.speedFactorSpinner.setValue("x1");                this.speedFactorSpinner.setEnabled(false);                speedPanel.add(this.speedFactorSpinner);            }            positionPanel.add(speedPanel);        }        add(positionPanel);    }}

⌨️ 快捷键说明

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