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 + -
显示快捷键?