Java: Example -- drawHouse

This example shows how to build our own methods that call other methods of ours. This JPanel can be used as a component.

Problem: We need to write a new method that does something. We already have a method that does only part of the problem, but not all of it. How can we write this?
Solution: We can use methods that we wrote earlier so that we don't have to write everything again.
  1 /**
  2   * HousePanel.java - Component to draw houses.  
  3   * This class functions as a GUI component, Add to a layout.
  4   * @version 22 June 1998, revised July 1999,  2002-02-07 JPanel
  5   * @author Fred Swartz, Adapted from 'Java for Students'
  6   */
  7 import java.awt.*;
  8 import javax.swing.*;
  9 
 10 public class HousePanel extends JPanel {  
 11     //====================================================== constructor
 12     public HousePanel() {
 13         setPreferredSize(new Dimension(100, 100));
 14         setBackground(new Color(224, 224, 224));
 15     }//end constructor
 16     
 17     //=================================================== paintComponent
 18     public void paintComponent(Graphics g) {
 19         super.paintComponent(g);
 20         drawHouse(g, 10, 90, 30, 15);
 21         drawHouse(g, 60, 90, 20, 60);
 22     } //end paintComponent
 23 
 24     //======================================================= drawHouse
 25     // Draw a house with a roof 50% of the height.
 26     void drawHouse(Graphics g, int x, int y, int width, int height) {
 27         // (x,y) is the bottom left corner of the house.
 28         g.drawRect(x, y-height, width, height);
 29         drawTriangle(g, x, y-height, width, height/2);
 30     }//end drawHouse
 31 
 32     //==================================================== drawTriangle
 33     // Draw equilateral triangle
 34     void drawTriangle(Graphics tg, int x, int y, int base, int height) {
 35         tg.drawLine(x, y, x+base, y);            // draw base
 36         tg.drawLine(x+base, y, x + base/2, y - height); // draw right
 37         tg.drawLine(x + base/2, y-height, x, y); // draw left
 38     }//end drzwTriangle
 39 }//end class