FileDocCategorySizeDatePackage
ImageBorder.javaAPI DocExample3700Mon Jan 09 11:01:58 GMT 2006None

ImageBorder.java

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.*;
import javax.swing.border.AbstractBorder;

public class ImageBorder extends AbstractBorder {
    
    Image top_center, top_left, top_right;
    Image left_center, right_center;
    Image bottom_center, bottom_left, bottom_right;
    Insets insets;
    
    public ImageBorder(Image top_left, Image top_center, Image top_right,
        Image left_center, Image right_center,
        Image bottom_left, Image bottom_center, Image bottom_right) {
            
        this.top_left = top_left;
        this.top_center = top_center;
        this.top_right = top_right;
        this.left_center = left_center;
        this.right_center = right_center;
        this.bottom_left = bottom_left;
        this.bottom_center = bottom_center;
        this.bottom_right = bottom_right;
    }
    
    public void setInsets(Insets insets) {
        this.insets = insets;
    }
    
    public Insets getBorderInsets(Component c) {
        if(insets != null) {
            return insets;
        } else {
            return new Insets(top_center.getHeight(null),left_center.getWidth(null),
                bottom_center.getHeight(null), right_center.getWidth(null));
        }
    }
    
    
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        g.setColor(Color.white);
        g.fillRect(x,y,width,height);

        Graphics2D g2 = (Graphics2D)g;
        
        int tlw = top_left.getWidth(null);
        int tlh = top_left.getHeight(null);
        int tcw = top_center.getWidth(null);
        int tch = top_center.getHeight(null);
        int trw = top_right.getWidth(null);
        int trh = top_right.getHeight(null);
        
        int lcw = left_center.getWidth(null);
        int lch = left_center.getHeight(null);
        int rcw = right_center.getWidth(null);
        int rch = right_center.getHeight(null);
        
        int blw = bottom_left.getWidth(null);
        int blh = bottom_left.getHeight(null);
        int bcw = bottom_center.getWidth(null);
        int bch = bottom_center.getHeight(null);
        int brw = bottom_right.getWidth(null);
        int brh = bottom_right.getHeight(null);
        
        fillTexture(g2,top_left,      x,            
          y,            tlw,           tlh);
        fillTexture(g2,top_center,    x+tlw,        
          y,            width-tlw-trw, tch);
        fillTexture(g2,top_right,     x+width-trw,  y,            trw,           trh);
        
        fillTexture(g2,left_center,   x,            y+tlh,        lcw,           height-tlh-blh);
        fillTexture(g2,right_center,  x+width-rcw,  y+trh,        rcw,           height-trh-brh);
        
        fillTexture(g2,bottom_left,   x,            y+height-blh, blw,           blh);
        fillTexture(g2,bottom_center, x+blw,        y+height-bch, width-blw-brw, bch);
        fillTexture(g2,bottom_right,  x+width-brw,  y+height-brh, brw,           brh);
    }
    
    public void fillTexture(Graphics2D g2, Image img, int x, int y, int w, int h) {
        BufferedImage buff = createBufferedImage(img);
        Rectangle anchor = new Rectangle(x,y,
            img.getWidth(null),img.getHeight(null));
        TexturePaint paint = new TexturePaint(buff,anchor);
        g2.setPaint(paint);
        g2.fillRect(x,y,w,h);
    }

    public BufferedImage createBufferedImage(Image img) {
        BufferedImage buff = new BufferedImage(img.getWidth(null), 
            img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
        Graphics gfx = buff.createGraphics();
        gfx.drawImage(img, 0, 0, null);
        gfx.dispose();
        return buff;
    }
}