📄 rubbersheetimage.java
字号:
/*Copyright (C) 2001, 2009 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.examples;import gov.nasa.worldwind.*;import gov.nasa.worldwind.avlist.*;import gov.nasa.worldwind.data.*;import gov.nasa.worldwind.event.*;import gov.nasa.worldwind.examples.util.*;import gov.nasa.worldwind.formats.gcps.GCPSReader;import gov.nasa.worldwind.formats.tab.TABRasterReader;import gov.nasa.worldwind.formats.worldfile.WorldFile;import gov.nasa.worldwind.geom.*;import gov.nasa.worldwind.layers.*;import gov.nasa.worldwind.pick.PickedObject;import gov.nasa.worldwind.render.*;import gov.nasa.worldwind.util.*;import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.awt.image.*;import java.io.File;import java.util.ArrayList;/** * @author tag * @version $Id: RubberSheetImage.java 9579 2009-03-20 19:13:50Z dcollins $ */public class RubberSheetImage extends ApplicationTemplate{ public static final String OPEN_IMAGE_FILE = "OpenImageFile"; public static final String SET_IMAGE_OPACITY = "SetImageOpacity"; public static final String TOGGLE_EDITING = "ToggleEditing"; protected static final String ENABLE_EDITING = "Enable Editing"; protected static final String DISABLE_EDITING = "Disable Editing"; public static class AppFrame extends ApplicationTemplate.AppFrame implements ActionListener { private Controller controller; private JButton toggleEditButton; public AppFrame() { this.controller = new Controller(this); this.controller.loadBackgroundData(); this.getWwd().addSelectListener(this.controller); this.initComponents(); } public JButton getToggleEditButton() { return this.toggleEditButton; } private void initComponents() { JMenuBar menuBar = new JMenuBar(); { JMenu menu = new JMenu("File"); JMenuItem item = new JMenuItem("Open..."); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(OPEN_IMAGE_FILE); item.addActionListener(this); menu.add(item); menuBar.add(menu); } this.setJMenuBar(menuBar); JPanel controlPanel = new JPanel(new BorderLayout(0, 0)); // hgap, vgap { controlPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 20, 0)); // top, left, bottom, right Box vbox = Box.createVerticalBox(); JLabel label = new JLabel("Opacity"); final JSlider slider = new JSlider(0, 100, 100); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { ActionEvent actionEvent = new ActionEvent(slider, 0, SET_IMAGE_OPACITY); actionPerformed(actionEvent); } }); Box box = Box.createHorizontalBox(); box.setAlignmentX(JComponent.LEFT_ALIGNMENT); box.add(label); box.add(slider); vbox.add(box); this.toggleEditButton = new JButton(DISABLE_EDITING); this.toggleEditButton.setAlignmentX(JComponent.LEFT_ALIGNMENT); this.toggleEditButton.setActionCommand(TOGGLE_EDITING); this.toggleEditButton.addActionListener(this); vbox.add(this.toggleEditButton); controlPanel.add(vbox, BorderLayout.NORTH); } this.getLayerPanel().add(controlPanel, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { if (e == null) return; if (this.controller == null) return; this.controller.actionPerformed(e); } } public static class SurfaceImageEntry { private SurfaceImage surfaceImage; private SurfaceImageEditor editor; private RenderableLayer layer; public SurfaceImageEntry(WorldWindow wwd, SurfaceImage surfaceImage, String name) { this.surfaceImage = surfaceImage; this.editor = new SurfaceImageEditor(wwd, surfaceImage); this.layer = new RenderableLayer(); this.layer.setName(name); this.layer.setPickEnabled(true); this.layer.addRenderable(surfaceImage); insertBeforePlacenames(wwd, this.layer); } public SurfaceImage getSurfaceImage() { return this.surfaceImage; } public SurfaceImageEditor getEditor() { return this.editor; } public RenderableLayer getLayer() { return this.layer; } } public static class Controller implements ActionListener, SelectListener { private AppFrame appFrame; private JFileChooser openFileChooser; private ImageIOReader imageReader; private ArrayList<SurfaceImageEntry> entryList = new ArrayList<SurfaceImageEntry>(); public Controller(AppFrame appFrame) { this.appFrame = appFrame; this.imageReader = new ImageIOReader(); } public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); if (actionCommand == null) return; //noinspection StringEquality if (actionCommand == OPEN_IMAGE_FILE) { this.doOpenImageFile(); } else //noinspection StringEquality if (actionCommand == SET_IMAGE_OPACITY) { JSlider slider = (JSlider) e.getSource(); this.doSetImageOpacity(slider.getValue() / 100.0); } else //noinspection StringEquality if (actionCommand == TOGGLE_EDITING) { String text = this.appFrame.getToggleEditButton().getText(); boolean enabled = DISABLE_EDITING.equals(text); this.appFrame.getToggleEditButton().setText(enabled ? ENABLE_EDITING : DISABLE_EDITING); this.enableEditing(!enabled); } } public void selected(SelectEvent e) { PickedObject topObject = e.getTopPickedObject(); if (e.getEventAction().equals(SelectEvent.LEFT_PRESS)) { if (topObject != null && !topObject.isTerrain() && topObject.getObject() instanceof SurfaceImage) { SurfaceImageEntry entry = this.getEntryFor((SurfaceImage) topObject.getObject()); if (entry != null) { this.setSelectedEntry(entry); } } } } protected void enableEditing(boolean enable) { for (SurfaceImageEntry entry : this.entryList) { entry.getLayer().setPickEnabled(enable); if (!enable) { entry.getEditor().setArmed(false); } } } protected void addSurfaceImage(SurfaceImage surfaceImage, String name) { SurfaceImageEntry entry = new SurfaceImageEntry(this.appFrame.getWwd(), surfaceImage, name); this.entryList.add(entry); this.setSelectedEntry(entry); this.appFrame.getLayerPanel().update(this.appFrame.getWwd()); } protected SurfaceImageEntry getEntryFor(SurfaceImage surfaceImage) { for (SurfaceImageEntry entry : this.entryList) { if (entry.getSurfaceImage() == surfaceImage) { return entry; } } return null; } protected void setSelectedEntry(SurfaceImageEntry selected) { for (SurfaceImageEntry entry : this.entryList)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -