RegPanel.java [src/usda/weru/weps] Revision: default Date:
/*
A basic implementation of the JFrame class.
*/
package usda.weru.weps;
//import java.beans.*;
//import javax.help.*;
import java.util.logging.Logger;
import usda.weru.util.ConvertedValue;
import usda.weru.util.Util;
/**
* This panel takes the simulation region information to know the area like its length, breadth
* and its orientation.
*/
public class RegPanel /*extends usda.weru.weps.gui.RegPanel_n implements PropertyChangeListener*/ {
private static final Logger logger=Logger.getLogger(RegPanel.class.getName());
public static final String SHAPE_RECTANGLE="rectangle";
public static final String SHAPE_SQUARE="square";
public static final String SHAPE_CIRCLE="circle";
public static final String SHAPE_HALF_CIRCLE_VE="half_circle_ve";
public static final String SHAPE_HALF_CIRCLE_VW="half_circle_vw";
public static final String SHAPE_HALF_CIRCLE_HN="half_circle_hn";
public static final String SHAPE_HALF_CIRCLE_HS="half_circle_hs";
public static final String SHAPE_QUARTER_CIRCLE_NE="quarter_circle_ne";
public static final String SHAPE_QUARTER_CIRCLE_SE="quarter_circle_se";
public static final String SHAPE_QUARTER_CIRCLE_SW="quarter_circle_sw";
public static final String SHAPE_QUARTER_CIRCLE_NW="quarter_circle_nw";
private static final String[] shapesComboBox={"Rectangle", "Square", "Circle", "Half Circle VE", "Half Circle VW", "Half Circle HS", "Half Circle HN", "Quarter Circle NE", "Quarter Circle SE", "Quarter Circle SW", "Quarter Circle NW"};
private static final String[] shapesRunFile={SHAPE_RECTANGLE, SHAPE_SQUARE, SHAPE_CIRCLE, SHAPE_HALF_CIRCLE_VE, SHAPE_HALF_CIRCLE_VW, SHAPE_HALF_CIRCLE_HS, SHAPE_HALF_CIRCLE_HN, SHAPE_QUARTER_CIRCLE_NE, SHAPE_QUARTER_CIRCLE_SE, SHAPE_QUARTER_CIRCLE_SW, SHAPE_QUARTER_CIRCLE_NW};
String measurementUnits=Util.SIUnits;
private String c_shape=SHAPE_RECTANGLE;
private String c_fromShape=null;
private double Angle=0;
private ConvertedValue cXLen=new ConvertedValue(Util.SIUnits, "meter");
private ConvertedValue cYLen=new ConvertedValue(Util.SIUnits, "meter");
private ConvertedValue cRadius=new ConvertedValue(Util.SIUnits, "meter");
private ConvertedValue cArea=new ConvertedValue(Util.SIUnits, "m^2");
double to=1;
double from=1;
double lengthRatio=1; // = x / y
/**
* Default constructor that makes the main panel holding other components visible after
* initializing and calling the parent/super class which in this case is a GUI RegPanel and Panel.
*/
public RegPanel() {
// super();
// JP_main.setVisible(true);
// //Add supported shapes
// for (int i=0; i < shapesComboBox.length; i++) {
// JCB_Shape.addItem(makeStringObject(shapesComboBox[i]));
// }
cXLen.setValue(0);
cYLen.setValue(0);
cRadius.setValue(0);
cArea.setValue(0);
//Add units for US measurement system
cXLen.addDisplayUnits(Util.USUnits, "foot");
cYLen.addDisplayUnits(Util.USUnits, "foot");
cRadius.addDisplayUnits(Util.USUnits, "foot");
cArea.addDisplayUnits(Util.USUnits, "acre");
cArea.addDisplayUnits(Util.SIUnits, "hectare");
// displayFields();
// addHelp();
}
private Object makeStringObject(final String item) {
return new Object() {
public String toString() {
return item;
}
};
}
private static int convertComboShapeToIndex(String shapeFromCombo) {
for (int i=0; i < shapesComboBox.length; i++) {
if (shapeFromCombo.equals(shapesComboBox[i])) {
return i;
}
}
return 0;
}
static int convertRunFileShapeToIndex(String shapeFromCombo) {
for (int i=0; i < shapesRunFile.length; i++) {
if (shapeFromCombo.equals(shapesRunFile[i])) {
return i;
}
}
return 0;
}
private boolean isShape(String test) {
return isShape(test, c_shape);
}
public static boolean isShape(String test, String against) {
if (test == null || against == null) {
return false;
}
return against.equals(test);
}
// /**
// * Single argument constructor that makes the main panel holding other components visible after
// * initializing and calling the parent/super class which in this case is a GUI RegPanel and Panel.
// * @param sTitle The string title that will show up on the GUI when executed as its name/title.
// */
// public RegPanel(String sTitle) {
// this();
// setTitle(sTitle);
// }
//
// private void addHelp() {
// CSH.setHelpIDString(JP_main, "regPanel_html");
// //CSH.setHelpIDString(JL_Title, "WEPS simregion");
// CSH.setHelpIDString(JL_xlength, "regXLength_html");
// CSH.setHelpIDString(JTF_XLength, "regXLength_html");
// CSH.setHelpIDString(JL_ylength, "regYLength_html");
// CSH.setHelpIDString(JTF_YLength, "regYLength_html");
// CSH.setHelpIDString(JL_area, "regArea_html");
// CSH.setHelpIDString(JTF_Area, "regArea_html");
// CSH.setHelpIDString(JL_orientation, "regOrientation_html");
// CSH.setHelpIDString(JTF_Orientation, "regOrientation_html");
// }
//
// /**
// * Entry point for testing standalone. Used if this dialog is rum as an independent application.
// * If executed, makes the GUI for Simulation Region panel visible.
// * @param args These are the command line arguments passed to the main method.
// */
// static public void main(String args[]) {
// RegPanel rp=new RegPanel("RegPanel Test");
// rp.setVisible(true);
// RunFileData rfd=new RunFileData();
// ConfigData cd=ConfigData.getDefault();
// cd.addPropertyChangeListener(rp);
// rp.addPropertyChangeListener(cd);
// rfd.addPropertyChangeListener(rp);
// rp.addPropertyChangeListener(rfd);
// }
//
// public void JTF_XLength_focusLost(java.awt.event.FocusEvent event) {
// JTFXLength_actionPerformed(null);
// }
//
// public void JTF_YLength_focusLost(java.awt.event.FocusEvent event) {
// JTFYLength_actionPerformed(null);
// }
//
// public void JTF_Orientation_focusLost(java.awt.event.FocusEvent event) {
// JTFOrientation_actionPerformed(null);
// }
//
// public void JTFXLength_actionPerformed(java.awt.event.ActionEvent event) {
// cXLen.setDisplayValue(JTF_XLength.getValue());
// calculateShapes(true);
// changes.firePropertyChange(RunFileData.XLength, null, cXLen.toStringValue());
// }
//
// public void JTFYLength_actionPerformed(java.awt.event.ActionEvent event) {
// cYLen.setDisplayValue(JTF_YLength.getValue());
// calculateShapes(true);
// changes.firePropertyChange(RunFileData.YLength, null, cYLen.toStringValue());
// }
//
// public void JTFOrientation_actionPerformed(java.awt.event.ActionEvent event) {
// Angle=JTF_Orientation.getValue();
// if (Angle > 45) {
// Angle=45;
// JTF_Orientation.setValueInternal(Angle);
// }
// if (Angle < -45) {
// Angle=-45;
// JTF_Orientation.setValueInternal(Angle);
// }
//
// changes.firePropertyChange(RunFileData.RegionAngle, null, Double.toString(Angle));
//
// }
//
// public void JTF_Radius_actionPerformed(java.awt.event.ActionEvent event) {
// cRadius.setDisplayValue(JTF_Radius.getValue());
// calculateShapes(true);
// changes.firePropertyChange(RunFileData.Radius, null, cRadius.toStringValue());
// }
//
// public void JTF_Radius_focusLost(java.awt.event.FocusEvent event) {
// if (!event.isTemporary()) {
// JTF_Radius_actionPerformed(null);
// }
// }
//
// public void JTF_Area_actionPerformed(java.awt.event.ActionEvent event) {
// //User has entered area. Calculate the X / Y / Radius;
// cArea.setDisplayValue(JTF_Area.getValue());
// double areaSquareMeters=cArea.getValue(); //Converts hectares to square meters
// if (isShape(SHAPE_RECTANGLE)) {
// cYLen.setValue(Math.sqrt(areaSquareMeters / lengthRatio));
// cXLen.setValue(cYLen.getValue() * lengthRatio);
// changes.firePropertyChange(RunFileData.XLength, null, cXLen.toStringValue());
// changes.firePropertyChange(RunFileData.YLength, null, cYLen.toStringValue());
// } else if (isShape(SHAPE_SQUARE)) {
// cXLen.setValue(Math.sqrt(areaSquareMeters));
// cYLen.setValue(cXLen.getValue());
// changes.firePropertyChange(RunFileData.XLength, null, cXLen.toStringValue());
// changes.firePropertyChange(RunFileData.YLength, null, cYLen.toStringValue());
// } else if (isShape(SHAPE_CIRCLE)) {
// cRadius.setValue(Math.sqrt(areaSquareMeters / Math.PI));
// changes.firePropertyChange(RunFileData.Radius, null, cRadius.toStringValue());
// } else if (isShape(SHAPE_HALF_CIRCLE_HS) || isShape(SHAPE_HALF_CIRCLE_HN) || isShape(SHAPE_HALF_CIRCLE_VE) || isShape(SHAPE_HALF_CIRCLE_VW)) {
// cRadius.setValue(Math.sqrt(areaSquareMeters * 2 / Math.PI));
// changes.firePropertyChange(RunFileData.Radius, null, cRadius.toStringValue());
// } else if (isShape(SHAPE_QUARTER_CIRCLE_NE) || isShape(SHAPE_QUARTER_CIRCLE_SE) || isShape(SHAPE_QUARTER_CIRCLE_SW) || isShape(SHAPE_QUARTER_CIRCLE_NW)) {
// cRadius.setValue(Math.sqrt(areaSquareMeters * 4 / Math.PI));
// changes.firePropertyChange(RunFileData.Radius, null, cRadius.toStringValue());
// }
// calculateShapes(true);
// }
//
// public void JTF_Area_focusLost(java.awt.event.FocusEvent event) {
// if (!event.isTemporary()) {
// JTF_Area_actionPerformed(null);
// }
// }
//
//
//
//
//
//
//
//
//
// /**
// * Recognizes and takes appropriate actions on registered properties from different screens to
// * update and synchronize data and GUI screens as needed
// * @param e The event itself that is responsible for triggering the change required for registered
// * properties/components.
// */
// public void propertyChange(PropertyChangeEvent e) {
//// //System.out.println("pC: " + e.getPropertyName());
//// if (e.getPropertyName().equals(RunFileData.SimPoint1)) {
// if (e.getPropertyName().equals(RunFileData.XLength)) {
// try {
// cXLen.setValue(Double.parseDouble((String) e.getNewValue()));
// } catch (NumberFormatException k) {
// //System.err.println("RP-pC: bad XLen from rfd " + k);
// }
// calculateShapes();
//// } else if (e.getPropertyName().equals(RunFileData.SimPoint2)) {
// } else if (e.getPropertyName().equals(RunFileData.YLength)) {
// try {
// cYLen.setValue(Double.parseDouble((String) e.getNewValue()));
// } catch (NumberFormatException k) {
// //System.err.println("RP-pC: bad YLen from rfd " + k);
// }
// calculateShapes();
// } else if (e.getPropertyName().equals(RunFileData.RegionAngle)) {
// try {
// Angle=Double.parseDouble((String) e.getNewValue());
// if (Angle > 45) {
// Angle=45;
// }
// if (Angle < -45) {
// Angle=-45;
// }
// } catch (NumberFormatException k) {
// //System.err.println("RP-pC: bad Angle from rfd " + k);
// }
// JTF_Orientation.setValueInternal(Angle);
// } else if (e.getPropertyName().equals(RunFileData.Radius)) {
// try {
// cRadius.setValue(Double.parseDouble((String) e.getNewValue()));
// } catch (NumberFormatException k) {
// //System.err.println("RP-pC: bad Radius from rfd " + k);
// }
// calculateShapes();
//
// } else if (e.getPropertyName().equals(RunFileData.Shape)) {
// c_shape=e.getNewValue().toString();
// if (isShape(SHAPE_RECTANGLE) || isShape(SHAPE_SQUARE) || isShape(SHAPE_CIRCLE)) {
// to=1;
// } else if (isShape(SHAPE_HALF_CIRCLE_VE) || isShape(SHAPE_HALF_CIRCLE_VW) || isShape(SHAPE_HALF_CIRCLE_HS) || isShape(SHAPE_HALF_CIRCLE_HN)) {
// to=.5;
// } else if (isShape(SHAPE_QUARTER_CIRCLE_NE) || isShape(SHAPE_QUARTER_CIRCLE_SE) || isShape(SHAPE_QUARTER_CIRCLE_SW) || isShape(SHAPE_QUARTER_CIRCLE_NW)) {
// to=.25;
// }
// JCB_Shape.setSelectedIndex(convertRunFileShapeToIndex(c_shape));
// displayFields();
// calculateShapes(true);
// from=to;
// c_fromShape=c_shape;
//
// } else if (e.getPropertyName().equals(ConfigData.Units)) {
// measurementUnits=e.getNewValue().toString();
// cXLen.setDisplaySystem(measurementUnits);
// cYLen.setDisplaySystem(measurementUnits);
// cRadius.setDisplaySystem(measurementUnits);
// cArea.setDisplaySystem(measurementUnits);
// if (measurementUnits.equals(Util.USUnits)) {
// JL_xlengthUnits.setText("ft");
// JL_ylengthUnits.setText("ft");
// JL_areaUnits.setText("ac");
// JL_radiusUnits.setText("ft");
// } else {
// JL_xlengthUnits.setText("m");
// JL_ylengthUnits.setText("m");
// JL_areaUnits.setText("ha");
// JL_radiusUnits.setText("m");
// }
// updateDisplayValues();
//
// }
// }
//
// private void updateDisplayValues() {
// JTF_XLength.setValueInternal(cXLen.getDisplayValue());
// JTF_YLength.setValueInternal(cYLen.getDisplayValue());
// JTF_Radius.setValueInternal(cRadius.getDisplayValue());
// JTF_Area.setValueInternal(cArea.getDisplayValue());
// }
// private PropertyChangeSupport changes=new PropertyChangeSupport(this);
//
// /**
// * Allows the container to add or register some other components to recognize the changes that occur
// * on this component
// * @param l The listener that listens and reacts towards the the changes to be reflected.
// */
// public void addPropertyChangeListener(PropertyChangeListener l) {
// changes.addPropertyChangeListener(l);
// }
//
// /**
// * Allows the container to remove or de-register some other components and stop recognizing the
// * changes that occur on this component
// * @param l The listener that does not listen and react towards the the changes to be reflected.
// */
// public void removePropertyChangeListener(PropertyChangeListener l) {
// changes.removePropertyChangeListener(l);
// }
//
// public void JCB_Shape_itemStateChanged(java.awt.event.ItemEvent evt) {
// String selectedShape=JCB_Shape.getSelectedItem().toString();
// int shapeIndex=convertComboShapeToIndex(selectedShape);
// c_shape=shapesRunFile[shapeIndex];
// changes.firePropertyChange(RunFileData.Shape, null, c_shape);
// }
//
// private void displayFields() {
// //Hide everything but the combo box.
// //Fields
// JTF_XLength.setVisible(false);
// JTF_YLength.setVisible(false);
// JTF_YLength.setEditable(true);
// JTF_Radius.setVisible(false);
// //Labels
// JL_area.setVisible(false);
// JL_xlength.setVisible(false);
// JL_ylength.setVisible(false);
// JL_orientation.setVisible(false);
// JL_radius.setVisible(false);
// //Units
// JL_areaUnits.setVisible(false);
// JL_xlengthUnits.setVisible(false);
// JL_ylengthUnits.setVisible(false);
// JL_orientationUnits.setVisible(false);
// JL_radiusUnits.setVisible(false);
//
// boolean circles=false;
// boolean rectangles=false;
//
// if (isShape(SHAPE_CIRCLE) || isShape(SHAPE_HALF_CIRCLE_VE) || isShape(SHAPE_HALF_CIRCLE_VW) || isShape(SHAPE_HALF_CIRCLE_HN) || isShape(SHAPE_HALF_CIRCLE_HS) || isShape(SHAPE_QUARTER_CIRCLE_NE) || isShape(SHAPE_QUARTER_CIRCLE_SE) || isShape(SHAPE_QUARTER_CIRCLE_SW) || isShape(SHAPE_QUARTER_CIRCLE_NW)) {
// circles=true;
// } else if (isShape(SHAPE_SQUARE)) {
// rectangles=true;
// JTF_YLength.setEditable(false);
// } else {
// rectangles=true;
// }
//
// if (rectangles) {
// //Fields
// JTF_XLength.setVisible(true);
// JTF_YLength.setVisible(true);
// //Labels
// JL_area.setVisible(true);
// JL_xlength.setVisible(true);
// JL_ylength.setVisible(true);
// JL_orientation.setVisible(true);
// //Units
// JL_areaUnits.setVisible(true);
// JL_xlengthUnits.setVisible(true);
// JL_ylengthUnits.setVisible(true);
// JL_orientationUnits.setVisible(true);
// } else if (circles) {
// //Fields
// JTF_Radius.setVisible(true);
// //Labels
// JL_area.setVisible(true);
// JL_orientation.setVisible(true);
// JL_radius.setVisible(true);
// //Units
// JL_areaUnits.setVisible(true);
// JL_orientationUnits.setVisible(true);
// JL_radiusUnits.setVisible(true);
// }
//
//
// }
//
private void calculateShapes() {
calculateShapes(false);
}
private void calculateShapes(boolean save) {
double ratio=to / from;
boolean changedXLen=false;
boolean changedYLen=false;
boolean changedRadius=false;
//Calculate rectangle from shape
if (isShape(SHAPE_RECTANGLE)) {
if (ratio > 1 || isShape(SHAPE_SQUARE, c_fromShape) || isShape(SHAPE_CIRCLE, c_fromShape)) {
double area=cXLen.getValue() * cYLen.getValue() * ratio;
cYLen.setValue(Math.sqrt(area / lengthRatio));
cXLen.setValue(cYLen.getValue() * lengthRatio);
changedXLen=true;
changedYLen=true;
from=to;
}
lengthRatio=cXLen.getValue() / cYLen.getValue();
if (lengthRatio == 0 || Double.isNaN(lengthRatio)) {
lengthRatio=1;
}
cRadius.setValue(Math.sqrt((cXLen.getValue() * cYLen.getValue()) / Math.PI));
changedRadius=true;
} else if (isShape(SHAPE_SQUARE)) {
if (ratio > 1) {
cXLen.setValue(Math.sqrt(cXLen.getValue() * cYLen.getValue() * ratio));
changedXLen=true;
from=to;
}
cYLen.setValue(cXLen.getValue());
cRadius.setValue(Math.sqrt((cXLen.getValue() * cXLen.getValue()) / Math.PI));
changedYLen=true;
changedRadius=true;
} else if (isShape(SHAPE_CIRCLE)) {
cXLen.setValue(Math.sqrt(Math.PI * cRadius.getValue() * cRadius.getValue()));
cYLen.setValue(cXLen.getValue());
changedXLen=true;
changedYLen=true;
} else if (isShape(SHAPE_HALF_CIRCLE_HS) || isShape(SHAPE_HALF_CIRCLE_HN)) {
cXLen.setValue(Math.sqrt(Math.PI * cRadius.getValue() * cRadius.getValue()));
cYLen.setValue(cXLen.getValue() / 2);
changedXLen=true;
changedYLen=true;
} else if (isShape(SHAPE_HALF_CIRCLE_VE) || isShape(SHAPE_HALF_CIRCLE_VW)) {
cYLen.setValue(Math.sqrt(Math.PI * cRadius.getValue() * cRadius.getValue()));
cXLen.setValue(cYLen.getValue() / 2);
changedXLen=true;
changedYLen=true;
} else if (isShape(SHAPE_QUARTER_CIRCLE_NE) || isShape(SHAPE_QUARTER_CIRCLE_SE) || isShape(SHAPE_QUARTER_CIRCLE_SW) || isShape(SHAPE_QUARTER_CIRCLE_NW)) {
cXLen.setValue(Math.sqrt(Math.PI * cRadius.getValue() * cRadius.getValue() / 4));
cYLen.setValue(cXLen.getValue());
changedXLen=true;
changedYLen=true;
}
//Calculate area, square meters to hectares
cArea.setValue(cXLen.getValue() * cYLen.getValue());
// updateDisplayValues();
// if (save) {
// if (changedXLen) {
// changes.firePropertyChange(RunFileData.XLength, null, cXLen.toStringValue());
// }
// if (changedYLen) {
// changes.firePropertyChange(RunFileData.YLength, null, cYLen.toStringValue());
// }
// if (changedRadius) {
// changes.firePropertyChange(RunFileData.Radius, null, cRadius.toStringValue());
// }
// }
}
}