public void paintComponent(Graphics g){
        super.paintComponent(g);    // paints background
        // OK,  paint it ourselves
        // we need the font...
        if(fontModel == null){
            return;
        }        
        if(offImg == null){
            offImg = createImage(initialWid, initialHgt);
            Graphics2D offG = (Graphics2D)offImg.getGraphics();

            offG.setColor(Color.lightGray);
            for(int i=8;i<initialWid;i+=8)
                offG.drawLine(i,0,i,initialHgt);
            for(int i=8;i<initialHgt;i+=8)
                offG.drawLine(0,i,initialWid,i);

            
            // now draw each char individually so that its CROPPED
            int charWid =8*fontModel.tilesWide;
            int charHgt = 8*fontModel.tilesHigh;
            
            Image charImg = createImage(charWid,charHgt );
            Graphics2D charG = (Graphics2D)charImg.getGraphics();
            FontRenderContext frc = charG.getFontRenderContext();
            if(fontModel.isAntiAliasing){
                charG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                // KEY_DITHERING has no effect
                // KEY_INTERPOLATION has no effect
                // KEY_RENDERING has no effect
                // KEY_TEXT_ANTIALIASING has no effect
                // KEY_FRACTIONALMETRICS has no effect
                // KEY_COLOR_RENDERING has no effect
            }

            char theChars[] = fontModel.determineText();
            for(int i=0;i<theChars.length;i++){
                charG.setColor(Color.BLACK);
                charG.fillRect(0,0, charWid,charHgt);
                charG.setColor(fontModel.getColor());
                TextLayout layout = new TextLayout(""+theChars[i], fontModel.theFont, frc);            
                layout.draw(charG, fontModel.leftSpacing, charHgt-fontModel.bottomSpacing);
                int semiX = i % 16;
                int semiY = i / 16;
                offG.drawImage(charImg,semiX*charWid,semiY*charHgt,null);
            }
        }
        if(offImg != null) {
            Graphics2D g2d = (Graphics2D) g;
            AffineTransform tx = AffineTransform.getScaleInstance(scaleAmount,scaleAmount);
            g2d.drawImage(offImg, tx, null);
        }
    }