public void print(int mm, int yy) {

        /** The number of days to leave blank at the start of this month */

        int leadGap = 0;



        System.out.print(months[mm]);        // print month and year

        System.out.print(" ");

        System.out.print(yy);

        System.out.println( );



        if (mm < 0 || mm > 11)

            throw new IllegalArgumentException("Month " + mm + " bad, must be 0-11");

        GregorianCalendar calendar = new GregorianCalendar(yy, mm, 1);



        System.out.println("Su Mo Tu We Th Fr Sa");



        // Compute how much to leave before the first.

        // get(DAY_OF_WEEK  ) returns 0 for Sunday, which is just right.

        leadGap = calendar.get(Calendar.DAY_OF_WEEK)-1;



        int daysInMonth = dom[mm];

        if (calendar.isLeapYear(calendar.get(Calendar.YEAR)) && mm == 1)

            ++daysInMonth;



        // Blank out the labels before 1st day of month

        for (int i = 0; i < leadGap; i++) {

            System.out.print("   ");

        }



        // Fill in numbers for the day of month.

        for (int i = 1; i <= daysInMonth; i++) {



            // This "if" statement is simpler than fiddling with NumberFormat

            if (i<=9)

                System.out.print(' ');

            System.out.print(i);



            if ((leadGap + i) % 7 == 0)        // wrap if end of line.

                System.out.println( );

            else

                System.out.print(' ');

        }

        System.out.println( );

    }