The code in Listing 24 :
- Creates the JPanel object, and sets its layout property to GridLayout.
- Creates the requisite number of objects of the MyCanvas class (which extends Canvas), setting the background colors of the panels alternately towhite and gray.
- Adds the MyCanvas objects to the cells in the grid. (Note that the constructor for each MyCanvas object receives an integer that specifies itsposition in the stack of MyCanvas objects. We will see how that information is used later.)
More routine construction code
The code in Listing 25 is simply more routine code required to:
- Finish the construction of the GUI object
- Set its location and size on the screen
- Make it visible
Once again, I will let the comments serve as the explanation for this code.
Listing 25. More routine construction code. |
---|
//Add the sub-assemblies to the
// frame. Set its location, size,// and title, and make it visible.
getContentPane().add(ctlPnl,"South");
getContentPane().add(canvasPanel,"Center");
setBounds(0,0,frmWidth,frmHeight);setTitle("Graph01, " +
"Copyright 2002, " +"Richard G. Baldwin");
setVisible(true);//Set to exit on X-button click
setDefaultCloseOperation(EXIT_ON_CLOSE);
//Get and save the size of the// plotting surface
width = canvases[0].getWidth();
height = canvases[0].getHeight(); |
Force a repaint
As you will see later, the actual plotting behavior of this program is defined by the code in an overridden version of the paint method in the MyCanvas class. I will discuss that code in some detail later.
One way to cause the code in the overridden paint method to be executed is to call the repaint method on a reference to a MyCanvas object.
The code in Listing 26 calls the repaint method on each MyCanvas object in sequence, to guarantee that they are properly painted when the GUI object first becomes visible.
Listing 26. Force a repaint. |
---|
for(int cnt = 0; cnt<number; cnt++){
canvases[cnt].repaint();
}//end for loop}//end constructor |
Similar code will be used again later to cause the graphs to be repainted each time the user presses the Graph button in the bottom right corner of Figure 1 .
End of the constructor
The code in Listing 26 also ends the constructor for the GUI object. When the constructor finishes execution, the GUI appears on the screen with all plotting areas properly painted.
Re-plotting the data
[link] shows the beginning of the event handler that is registered on the button to cause the functions to be re-plotted.
Beginning of the re-plot code. |
---|
public void actionPerformed(
ActionEvent evt){//Re-instantiate the object that
// provides the datatry{
if(args != null){data = (GraphIntfc01)Class.
forName(args).newInstance();}else{
data = new junk();}//end else
}catch(Exception e){//Known to be safe at this point.
// Otherwise would have aborted// earlier.
}//end catch |
The purpose of the event handler is to cause the functions to be re-plotted after the user changes the plotting parameters.