/*
* $Id: NewLevelsDialog.java,v 1.4 2001/02/08 00:29:39 dwd Exp $
*
* This software is provided by NOAA for full, free and open release. It is
* understood by the recipient/user that NOAA assumes no liability for any
* errors contained in the code. Although this software is released without
* conditions or restrictions in its use, it is expected that appropriate
* credit be given to its author and to the National Oceanic and Atmospheric
* Administration should the software be included by the recipient as an
* element in other product development.
*/
package sgtplot.swing.prop;
import javax.swing.*;
import sgtplot.Graph;
import sgtplot.dm.SGTGrid;
import sgtplot.pmel.swing.JSlider2Double;
import sgtplot.util.Range2D;
import java.awt.*;
/**
* Computes the range for creating a ContourLevels
* object. If a SGTGrid object is provided
* NewLevelsDialog can use the actual data range to help
* in creating the contour levels.
*
* @author Donald Denbo
* @version $Revision: 1.4 $, $Date: 2001/02/08 00:29:39 $
* @since 2.0
*/
public class NewLevelsDialog extends JDialog {
private int result_;
private SGTGrid grid_ = null;
private boolean useSpacing_ = false;
private boolean rangeComputed_ = false;
/** OK button selected */
public static int OK_RESPONSE = 1;
/** Cancel button selected */
public static int CANCEL_RESPONSE = 2;
/**
* Constructor.
*/
public NewLevelsDialog(Frame parent) {
super(parent);
try {
jbInit();
pack();
} catch(Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
getContentPane().setLayout(new BorderLayout(0,0));
setSize(282,366);
setVisible(false);
buttonPanel.setBorder(etchedBorder1);
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
getContentPane().add(buttonPanel, "South");
okButton.setText("OK");
okButton.setActionCommand("OK");
buttonPanel.add(okButton);
cancelButton.setText("Cancel");
cancelButton.setActionCommand("Cancel");
buttonPanel.add(cancelButton);
//$$ etchedBorder1.move(0,444);
mainPanel.setLayout(new GridBagLayout());
getContentPane().add(mainPanel, "Center");
mainPanel.setBackground(new java.awt.Color(204,204,204));
JPanel1.setBorder(titledBorder1);
JPanel1.setLayout(new GridBagLayout());
mainPanel.add(JPanel1, new GridBagConstraints(0,0,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,5,5),0,0));
JLabel1.setText("Minimum:");
JPanel1.add(JLabel1,new GridBagConstraints(0,0,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,10,5,2),0,0));
minTextField.setColumns(15);
JPanel1.add(minTextField,new GridBagConstraints(1,0,1,1,1.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,0,5,10),0,0));
JLabel2.setText("Maximum:");
JPanel1.add(JLabel2,new GridBagConstraints(0,1,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,5,2),0,0));
maxTextField.setColumns(15);
JPanel1.add(maxTextField,new GridBagConstraints(1,1,1,1,1.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,0,5,10),0,0));
JPanel3.setBorder(titledBorder3);
JPanel3.setLayout(new GridBagLayout());
mainPanel.add(JPanel3, new GridBagConstraints(0,1,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(0,5,0,5),0,0));
JLabel3.setText("Number:");
JPanel3.add(JLabel3,new GridBagConstraints(0,0,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,10,0,2),0,0));
nlevelsTextField.setColumns(5);
JPanel3.add(nlevelsTextField,new GridBagConstraints(1,0,1,1,0.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,0,0,10),0,0));
JLabel5.setText("or");
JPanel3.add(JLabel5,new GridBagConstraints(0,1,1,1,0.0,0.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(0,0,0,5),0,0));
JLabel5.setBackground(new java.awt.Color(204,204,204));
JLabel5.setForeground(new java.awt.Color(102,102,153));
JLabel4.setText("Spacing:");
JPanel3.add(JLabel4,new GridBagConstraints(0,2,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(0,10,5,2),0,0));
spacingTextField.setColumns(15);
JPanel3.add(spacingTextField,new GridBagConstraints(1,2,1,1,0.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(0,0,5,10),0,0));
JPanel4.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
mainPanel.add(JPanel4, new GridBagConstraints(0,2,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0));
computeButton.setText("Compute \"nice\" Range");
JPanel4.add(computeButton);
JPanel2.setBorder(titledBorder2);
JPanel2.setLayout(new GridBagLayout());
mainPanel.add(JPanel2, new GridBagConstraints(0,3,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0));
JLabel6.setText("Minimum:");
JPanel2.add(JLabel6,new GridBagConstraints(0,0,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,10,5,2),0,0));
minCompTextField.setEditable(false);
minCompTextField.setColumns(15);
minCompTextField.setEnabled(false);
JPanel2.add(minCompTextField,new GridBagConstraints(1,0,1,1,1.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,0,5,10),0,0));
JLabel7.setText("Minimum:");
JPanel2.add(JLabel7,new GridBagConstraints(0,1,1,1,0.0,0.0,
GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,5,2),0,0));
maxCompTextField.setEditable(false);
maxCompTextField.setColumns(15);
maxCompTextField.setEnabled(false);
JPanel2.add(maxCompTextField,new GridBagConstraints(1,1,1,1,0.0,1.0,
GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,0,5,10),0,0));
SymWindow aSymWindow = new SymWindow();
this.addWindowListener(aSymWindow);
SymAction lSymAction = new SymAction();
cancelButton.addActionListener(lSymAction);
okButton.addActionListener(lSymAction);
minTextField.addActionListener(lSymAction);
maxTextField.addActionListener(lSymAction);
nlevelsTextField.addActionListener(lSymAction);
spacingTextField.addActionListener(lSymAction);
SymPropertyChange lSymPropertyChange = new SymPropertyChange();
computeButton.addActionListener(lSymAction);
}
/** Used internally */
public void addNotify() {
// Record the size of the window prior to calling parents addNotify.
Dimension d = getSize();
super.addNotify();
if (fComponentsAdjusted)
return;
// Adjust components according to the insets
Insets ins = getInsets();
setSize(ins.left + ins.right + d.width, ins.top + ins.bottom + d.height);
Component components[] = getContentPane().getComponents();
for (int i = 0; i < components.length; i++) {
Point p = components[i].getLocation();
p.translate(ins.left, ins.top);
components[i].setLocation(p);
}
fComponentsAdjusted = true;
}
// Used for addNotify check.
boolean fComponentsAdjusted = false;
/**
* Constructor.
*/
public NewLevelsDialog(String title) {
this();
setTitle(title);
}
/**
* Default constructor.
*/
public NewLevelsDialog() {
this((Frame)null);
}
/**
* Make the dialog visible
*/
public void setVisible(boolean b) {
if(b) {
setLocation(50, 50);
}
super.setVisible(b);
}
class SymWindow extends java.awt.event.WindowAdapter {
public void windowClosing(java.awt.event.WindowEvent event) {
Object object = event.getSource();
if (object == NewLevelsDialog.this)
NewLevelsDialog_WindowClosing(event);
}
}
void NewLevelsDialog_WindowClosing(java.awt.event.WindowEvent event) {
dispose();
}
javax.swing.JPanel buttonPanel = new javax.swing.JPanel();
javax.swing.JButton okButton = new javax.swing.JButton();
javax.swing.JButton cancelButton = new javax.swing.JButton();
javax.swing.border.EtchedBorder etchedBorder1 = new javax.swing.border.EtchedBorder();
javax.swing.JPanel mainPanel = new javax.swing.JPanel();
javax.swing.JPanel JPanel1 = new javax.swing.JPanel();
javax.swing.JLabel JLabel1 = new javax.swing.JLabel();
javax.swing.JTextField minTextField = new javax.swing.JTextField();
javax.swing.JLabel JLabel2 = new javax.swing.JLabel();
javax.swing.JTextField maxTextField = new javax.swing.JTextField();
javax.swing.JPanel JPanel3 = new javax.swing.JPanel();
javax.swing.JLabel JLabel3 = new javax.swing.JLabel();
javax.swing.JTextField nlevelsTextField = new javax.swing.JTextField();
javax.swing.JLabel JLabel5 = new javax.swing.JLabel();
javax.swing.JLabel JLabel4 = new javax.swing.JLabel();
javax.swing.JTextField spacingTextField = new javax.swing.JTextField();
javax.swing.JPanel JPanel4 = new javax.swing.JPanel();
javax.swing.JButton computeButton = new javax.swing.JButton();
javax.swing.JPanel JPanel2 = new javax.swing.JPanel();
javax.swing.JLabel JLabel6 = new javax.swing.JLabel();
javax.swing.JTextField minCompTextField = new javax.swing.JTextField();
javax.swing.JLabel JLabel7 = new javax.swing.JLabel();
javax.swing.JTextField maxCompTextField = new javax.swing.JTextField();
javax.swing.border.TitledBorder titledBorder1 = new javax.swing.border.TitledBorder("Data Range");
javax.swing.border.TitledBorder titledBorder3 = new javax.swing.border.TitledBorder("Select");
javax.swing.border.TitledBorder titledBorder2 = new javax.swing.border.TitledBorder("Computed Range");
class SymAction implements java.awt.event.ActionListener {
public void actionPerformed(java.awt.event.ActionEvent event) {
Object object = event.getSource();
if (object == cancelButton)
cancelButton_actionPerformed(event);
else if (object == okButton)
okButton_actionPerformed(event);
else if (object == minTextField)
minTextField_actionPerformed(event);
else if (object == maxTextField)
maxTextField_actionPerformed(event);
else if (object == nlevelsTextField)
nlevelsTextField_actionPerformed(event);
else if (object == spacingTextField)
spacingTextField_actionPerformed(event);
else if (object == computeButton)
computeButton_actionPerformed(event);
}
}
void cancelButton_actionPerformed(java.awt.event.ActionEvent event) {
this.setVisible(false);
result_ = CANCEL_RESPONSE;
}
void okButton_actionPerformed(java.awt.event.ActionEvent event) {
result_ = OK_RESPONSE;
this.setVisible(false);
}
/**
* Test entry point
*/
public static void main(String[] args) {
NewLevelsDialog la = new NewLevelsDialog();
la.setTitle("Test New Levels Dialog");
la.setVisible(true);
}
/**
* Show the dialog and wait for a response.
*
* @param grid the data grid
* @return result, either CANCEL_RESPONSE or OK_RESPONSE
*/
public int showDialog(SGTGrid grid) {
setGrid(grid);
result_ = CANCEL_RESPONSE;
setModal(true);
super.setVisible(true);
return result_;
}
/**
* Return the computed or entered range.
*/
public Range2D getRange() {
double min;
double max;
if(rangeComputed_) {
min = (new Double(minCompTextField.getText())).doubleValue();
max = (new Double(maxCompTextField.getText())).doubleValue();
} else {
min = (new Double(minTextField.getText())).doubleValue();
max = (new Double(maxTextField.getText())).doubleValue();
}
double delta = (new Double(spacingTextField.getText())).doubleValue();
Range2D range = new Range2D(min, max, delta);
return range;
}
/**
* Set the data grid for the computed range.
*/
public void setGrid(SGTGrid grid) {
double zmin, zmax;
grid_ = grid;
if(grid_ == null) {
titledBorder1.setTitle("Enter Range");
zmin = 0.0;
zmax = 10.0;
} else {
zmin = Double.MAX_VALUE;
zmax = -Double.MAX_VALUE;
double[] z = grid_.getZArray();
for(int i=0; i < z.length; i++) {
if(Double.isNaN(z[i])) continue;
zmin = Math.min(zmin, z[i]);
zmax = Math.max(zmax, z[i]);
}
}
minTextField.setText(Double.toString(zmin));
maxTextField.setText(Double.toString(zmax));
useSpacing_ = false;
nlevelsTextField.setText("10");
updateLevSpac();
}
private void updateLevSpac() {
int levels;
double delta = (new Double(maxTextField.getText())).doubleValue() -
(new Double(minTextField.getText())).doubleValue();
double spacing;
if(useSpacing_) {
levels = (int)(delta/(new Double(spacingTextField.getText())).doubleValue());
nlevelsTextField.setText(Integer.toString(levels));
} else {
spacing = delta/(new Integer(nlevelsTextField.getText())).intValue();
spacingTextField.setText(Double.toString(spacing));
}
}
void minTextField_actionPerformed(java.awt.event.ActionEvent event) {
updateLevSpac();
}
void maxTextField_actionPerformed(java.awt.event.ActionEvent event) {
updateLevSpac();
}
void nlevelsTextField_actionPerformed(java.awt.event.ActionEvent event) {
useSpacing_ = false;
updateLevSpac();
}
void spacingTextField_actionPerformed(java.awt.event.ActionEvent event) {
useSpacing_ = true;
updateLevSpac();
}
class SymPropertyChange implements java.beans.PropertyChangeListener {
public void propertyChange(java.beans.PropertyChangeEvent event) {
}
}
void computeButton_actionPerformed(java.awt.event.ActionEvent event) {
rangeComputed_ = true;
minCompTextField.setEnabled(true);
maxCompTextField.setEnabled(true);
double min = (new Double(minTextField.getText())).doubleValue();
double max = (new Double(maxTextField.getText())).doubleValue();
Range2D range = new Range2D(min,max);
int levels = Integer.parseInt(nlevelsTextField.getText());
Range2D newRange = Graph.computeRange(range, levels);
spacingTextField.setText(Double.toString(newRange.delta));
minCompTextField.setText(Double.toString(newRange.start));
maxCompTextField.setText(Double.toString(newRange.end));
}
}
Ads help maintain this website.