public void create(Graphics2D context)
    {
        FontMetrics metrics = context.getFontMetrics(theme.font);
        Rectangle2D stringBounds = metrics.getStringBounds(text, context);
        
        BufferedImage bi = new BufferedImage(
                (int) Math.ceil(stringBounds.getWidth() + 2*theme.textBuffer),
                (int) Math.ceil(stringBounds.getHeight() + 2*theme.textBuffer),
                BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = (Graphics2D) bi.getGraphics();
        
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(theme.background);
        g.fillRoundRect(0, 0, bi.getWidth(), bi.getHeight(), theme.arc, theme.arc);
        g.setColor(theme.border);
        g.drawRoundRect(0, 0, bi.getWidth() - 1, bi.getHeight() - 1, theme.arc, theme.arc);
        
        g.setFont(theme.font);
        g.setColor(theme.shadow);
        g.drawString(text,theme.textBuffer + 1.25f,
                (float) (theme.textBuffer/2f + stringBounds.getHeight() + 1.25));
        g.setColor(theme.text);
        g.drawString(text, theme.textBuffer,
                (float) (theme.textBuffer/2f + stringBounds.getHeight()));
        
        image = new AcceleratedImage(bi, AcceleratedImage.TRANSLUCENT);
        
        if (location.x + image.getWidth() > DisplayMonitor.screen.width)
        {
            location.x = DisplayMonitor.screen.width - image.getWidth();
        }
        if (location.y + image.getHeight() > DisplayMonitor.screen.height)
        {
            location.y = DisplayMonitor.screen.height - image.getHeight();
        }
    }