package gov.nasa.worldwind.examples;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
/**
* Open and view arbitrary surface images with accompanying world file.
*
* @author tag
* @version $Id: SurfaceImageViewer.java 4960 2008-04-08 08:19:05Z tgaskins $
*/
public class SurfaceImageViewer extends ApplicationTemplate
{
public static class AppFrame extends ApplicationTemplate.AppFrame
{
private JFileChooser fileChooser = new JFileChooser();
private JSlider opacitySlider;
private SurfaceImageLayer layer;
public AppFrame()
{
super(true, true, false);
try
{
this.layer = new SurfaceImageLayer();
this.layer.setOpacity(0.7);
this.layer.setPickEnabled(false);
this.layer.setName("Surface Images");
insertBeforeCompass(this.getWwd(), layer);
this.getLayerPanel().add(makeControlPanel(), BorderLayout.SOUTH);
this.getLayerPanel().update(this.getWwd());
}
catch (Exception e)
{
e.printStackTrace();
}
}
private JPanel makeControlPanel()
{
JPanel controlPanel = new JPanel(new GridLayout(0, 1, 5, 5));
JButton openButton = new JButton("Open Image File...");
controlPanel.add(openButton);
openButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent actionEvent)
{
int status = fileChooser.showOpenDialog(AppFrame.this);
if (status != JFileChooser.APPROVE_OPTION)
return;
File imageFile = fileChooser.getSelectedFile();
if (imageFile == null)
return;
try
{
layer.addImage(imageFile.getAbsolutePath());
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
this.opacitySlider = new JSlider();
this.opacitySlider.setMaximum(100);
this.opacitySlider.setValue((int) (layer.getOpacity() * 100));
this.opacitySlider.setEnabled(true);
this.opacitySlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
int value = opacitySlider.getValue();
layer.setOpacity(value / 100d);
getWwd().repaint();
}
});
JPanel opacityPanel = new JPanel(new BorderLayout(5, 5));
opacityPanel.add(new JLabel("Opacity"), BorderLayout.WEST);
opacityPanel.add(this.opacitySlider, BorderLayout.CENTER);
controlPanel.add(opacityPanel);
controlPanel.setBorder(new EmptyBorder(15, 15, 15, 15));
return controlPanel;
}
}
public static void main(String[] args)
{
ApplicationTemplate.start("World Wind Surface Images", SurfaceImageViewer.AppFrame.class);
}
}