<< Chapter < Page | Chapter >> Page > |
The code in Listing 32 is relatively straightforward. This code simply iterates from the minimum x-value to the maximum x-value, calling theappropriate method (from f1 through f5 ) to get the new y-values. In the process, it calls the drawLine method of the Graphics class to connect the points.
As it turns out, it is more difficult to draw and label the axes with tic marks than it is to plot the actual data.
The code to accomplish this is shown in Listing 33 .
Listing 33. The drawAxes method. |
---|
void drawAxes(Graphics g){
g.setColor(Color.RED);//Label left x-axis and bottom
// y-axis. These are the easy// ones. Separate the labels from
// the ends of the tic marks by// two pixels.
g.drawString("" + (int)xMin,getTheX(xMin),
getTheY(xTicLen/2)-2);g.drawString("" + (int)yMin,
getTheX(yTicLen/2)+2,getTheY(yMin));
//Label the right x-axis and the// top y-axis. These are the hard
// ones because the position must// be adjusted by the font size and
// the number of characters.//Get the width of the string for
// right end of x-axis and the// height of the string for top of// y-axis
//Create a string that is an// integer representation of the
// label for the right end of the// x-axis. Then get a character
// array that represents the// string.
int xMaxInt = (int)xMax;String xMaxStr = "" + xMaxInt;
char[]array = xMaxStr.
toCharArray();//Get a FontMetrics object that can
// be used to get the size of the// string in pixels.
FontMetrics fontMetrics =g.getFontMetrics();
//Get a bounding rectangle for the// string
Rectangle2D r2d =fontMetrics.getStringBounds(
array,0,array.length,g);//Get the width and the height of
// the bounding rectangle. The// width is the width of the label
// at the right end of the// x-axis. The height applies to
// all the labels, but is needed// specifically for the label at
// the top end of the y-axis.int labWidth =
(int)(r2d.getWidth());int labHeight =
(int)(r2d.getHeight());//Label the positive x-axis and the
// positive y-axis using the width// and height from above to
// position the labels. These// labels apply to the very ends of
// the axes at the edge of the// plotting surface.
g.drawString("" + (int)xMax,getTheX(xMax)-labWidth,
getTheY(xTicLen/2)-2);g.drawString("" + (int)yMax,
getTheX(yTicLen/2)+2,getTheY(yMax)+labHeight);
//Draw the axesg.drawLine(getTheX(xMin),
getTheY(0.0),getTheX(xMax),
getTheY(0.0));g.drawLine(getTheX(0.0),
getTheY(yMin),getTheX(0.0),
getTheY(yMax));//Draw the tic marks on axes
xTics(g);yTics(g);
}//end drawAxes |
The code in Listing 33 is fairly complex, particularly with respect to putting the labels on the ends of the axes. However, I doubt that many of youare interested in the details, so I will let the comments suffice to explain the code.
Notification Switch
Would you like to follow the 'Digital signal processing - dsp' conversation and receive update notifications?