import java.awt.GridBagLayout; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.*; import java.awt.geom.*; import java.awt.event.*;
public class selectGraphGridZoom extends JPanel implements MouseListener,
MouseMotionListener{
private static final long serialVersionUID = 1L;
private double maxDepth = Math.random() * 200;
private double maxKnots = 4;
// 1 inch = 72
// Setup the spacing for the cells
float ySpacing = 36;
// Use this number to fit to screen (72 is equal to 1
inch)
float height = 0.0f;
// Start at 72 and make 20 feet 1 inch
float length = (72 * (float)maxKnots) + 72;
// Start at 72 and make 1 knot 1 inch
float startX = 72f;
float startY = 72f;
boolean isMouseDraggingBox = false;
// Test to see if mouse is dragging
int posX, posY;
// Start position x of the rectangle
int mX, mY;
// Most recent position of the mouse
public selectGraphGridZoom() {
super();
initialize();
}
private void initialize() {
this.setSize(800, 800);
this.setLayout(new GridBagLayout());
posX = 72;
posY = 36;
addMouseListener( this );
addMouseMotionListener( this );
}
public void paint(Graphics g) {
setAxisHeight();
Graphics2D g2d = (Graphics2D)g;
Line2D lineY = new Line2D.Double( startX, startY, 72, height +
72);
Line2D lineTopX = new Line2D.Double( startX, startY, length,
72);
Line2D lineBottomX = new Line2D.Double( 72, height + 72,
length, height + 72);
// Create dotted lines for the grid system
Stroke strokeGrid = new BasicStroke(1,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL,
0,
new float[] { 1 , 1 },
0);
Stroke strokeRect = new BasicStroke(1,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL,
0,
new float[] { 2 , 2 },
0);
g2d.draw(lineY);
g2d.draw(lineTopX);
g2d.draw(lineBottomX);
g2d.setColor(Color.blue);
graphData(g2d);
g2d.setColor(Color.black);
g2d.setStroke(strokeGrid);
g2d.draw(createGrid());
labelAxis(g2d);
// Draw the rectangle on the graph
g2d.setColor(Color.magenta);
g2d.setStroke(strokeRect);
g2d.draw(createRectangle());
}
// Create a grid system for the graph
private Shape createGrid() {
GeneralPath path = new GeneralPath();
//Create a General path
to make the grid
// Make the YAxis grid
for( float x = ySpacing; x <= height; x+= ySpacing){
path.moveTo(startX, x + startY);
// Move to the
start position
path.lineTo(length, x + startY);
// Draw the
line with the start point being the moveTo
}
// Make the XAxis grid
for ( int x = 72; x < length; x += 72) {
path.moveTo(startX + x, startY);
// Move to the
start position
path.lineTo(x + startX, height + 72);
// Draw the line with
the start point being the moveTo
}
return path;
}
// Label the axis with there numbers
private void labelAxis(Graphics2D g2d) {
int xLabel = 0;
// The label for the x Axis
int yLabel = 0;
// The label for the y Axis
Font font = new Font("Serif", Font.BOLD, 12);
// Font properties
int shiftText = 4;
// Used to align the text with the line
g2d.setFont(font);
// Set the font for the text
g2d.drawString("Current (Knots)", length/2, 36);
// Display the label for the y
Axis
//Y Axis Labels
for( int x = shiftText; x <= height + shiftText; x +=
ySpacing){
g2d.drawString(Integer.toString(yLabel), startX
- 24, startY + x); // Write the text to the screen
yLabel += 10;
// Increment the text
}
// x Axis Labels
for ( int x = -shiftText; x < length - shiftText; x +=
72) {
g2d.drawString(Integer.toString(xLabel), startX
+ x, (startY - shiftText) - 15); // Write the text to the screen
xLabel += 1;
// Increment the text
}
g2d.translate(36, (height/2) + 72 + 36);
// Move to the position
to display the label
g2d.rotate(Math.toRadians(270));
// Rotate the
label
g2d.drawString("Depth (ft)" ,0, 0);
// Display the
label
// Return back to origin
g2d.rotate(Math.toRadians(-270));
g2d.translate(-36, -((height/2) + 72));
}
// Graph the data from the the array created of points
private void graphData(Graphics2D g2d) {
Point2D[] mPoints = setDataPointArray();
// Get the array of
points
for (int x = 0; x < mPoints.length-1; x++ ) {
Line2D line = new Line2D.Double(mPoints[x],
mPoints[x+1]); // Graph each point to its last
point
g2d.draw(line);
// Draw the line on the screen
}
}
// Creates an array of Points to graph
private Point2D[] setDataPointArray() {
double[] histData = getHistoricalData(getCellNum());
// Get the data
array
Point2D[] mPoints = new Point2D[histData.length];
// Create an array of points
double yCoord = startY - 18;
// Get start
position ( y - 18 because want to start at 0)
for(int x = 0; x < histData.length; x++) {
// Cycles through the
array
mPoints[x] = new Point2D.Double(histData[x] *
72, yCoord += 18 ); // Gives an x coord and y coord
}
// X is mulitiplied by 72 because that is 1 cell
// Y is added to 18 because that is .5 of 1 cell
return mPoints;
// Return the array of points
}
// Create an array of random data to graph
public double[] getHistoricalData(int getCellNum) {
double[] velocity = new double[getCellNum()];
// Create an array to store data
for( int x = 0; x < getCellNum(); x++){
// Determine number
items by finding the depth
velocity[x] = (Math.random()) + 1;
// Put random
numbers in ranging from around 1
}
return velocity;
// Return the array of random data
}
// Find the number of cells needed to create array
public int getCellNum() {
if (maxDepth % 5 != 0)
//
Determine if the number is divisable by 5
return (int)(maxDepth/5.0) + 1;
// If not add 1
more to the cell number
else
return (int)(maxDepth/5.0);
// 1
cell is equal to 5 feet in the array
}
// Find the maximum number needed to fit everything in graph
public void setAxisHeight() {
float currentHeight = 0.0f;
//
Stores current height needed
int remainder = 10 - ((int)maxDepth % 10);
// Find how much to
make a divisable of 10
int depth = (int)maxDepth + remainder;
// Make the number a
divisable of 10
currentHeight = (((depth)/10) * ySpacing);
// Convert the number
into the spacing for graph
this.height = currentHeight;
// Set the
height to found number
}
// Create a Rectangle to select on graph
public Shape createRectangle() {
int x = 72 * 2;
// This will hightlight 2 knots
int y = 72;
// This will highlight 20 feet
if(maxDepth < 10) {
x = 72;
y = 36;
}
return new Rectangle2D.Double(posX, posY, x, y);
}
public void mouseClicked(MouseEvent e) {
// Not needed for drag selection
}
public void mouseEntered(MouseEvent e) {
// Not needed for drag selection
}
public void mouseExited(MouseEvent e) {
// Not needed for drag selection
}
public void mousePressed(MouseEvent e) {
mX = e.getX();
// Found where the mouse is X
mY = e.getY();
// Found where the mouse is Y
System.out.println("x = " + mX + " y = " + mY);
if(posX < mX && mX < posX + 72 + 72 && posY < mY && mY
< posY + 36 + 72) { // Click within rectangle
isMouseDraggingBox = true;
// Set the value to true
System.out.println("true");
}
e.consume();
// Process the event
}
public void mouseReleased(MouseEvent e) {
isMouseDraggingBox = false;
e.consume();
//repaint();
//displayZoomView();
}
public void mouseDragged(MouseEvent e) {
if (isMouseDraggingBox) {
// Get new mouse position
int newMX = e.getX();
int newMY = e.getY();
// Move the rectangle to the new mouse position
posX += newMX - mX;
posY += newMY - mY;
// Update the new mouse position
mX = newMX;
mY = newMY;
repaint();
e.consume();
}
}
public void mouseMoved(MouseEvent e) {
// Not needed for drag selection
//System.out.println("new posx = " + posX + " new posY
= " + (posY+36));
}
public void update(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
Stroke strokeRect = new BasicStroke(1,
// Width of stroke
BasicStroke.CAP_BUTT, // End cap style
BasicStroke.JOIN_BEVEL, // Join style
0,
// Miter limit
new float[] { 2 , 2 }, // Dash pattern
0);
// Dash phase
// Draw the rectangle on the graph
g2d.setColor(Color.magenta);
g2d.setStroke(strokeRect);
g2d.draw(createRectangle());
}
private void displayZoomView() {
// displays the smaller view
getZoomViewLabels();
}
// Create a smaller Grid System for the zoomed view
private void getZoomViewLabels() {
double xLabelStart = 0.0;
xLabelStart = ((posX - 72)/72);
System.out.println("xLabel zoom = " + xLabelStart + "
posx = " + posX);
}
}
[Message sent by forum member 'ricorx7' (ricorx7)]
http://forums.java.net/jive/thread.jspa?messageID=208203
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
