小试大刀(Border:我也能这么漂亮!!!)

第一.当然是效果图啦;


package ImageBorder;

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, 
00null);
        gfx.dispose(); 

        return buff;
    }

}



Main;
package ImageBorder;

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

public class ImageBorderDemo {

    
public static void main(String[] args) {
        JFrame frame 
= new JFrame("照片边框");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel 
= new JPanel();
        JButton button 
= new JButton("这里放个美女就更好看了");
        panel.add(button)
        
        ImageBorder image_border 
= new ImageBorder(
            
new ImageIcon("images/upper_left.png").getImage(),
            
new ImageIcon("images/upper.png").getImage(),
            
new ImageIcon("images/upper_right.png").getImage(),

            
new ImageIcon("images/left_center.png").getImage(),
            
new ImageIcon("images/right_center.png").getImage(),

            
new ImageIcon("images/bottom_left.png").getImage(),
            
new ImageIcon("images/bottom_center.png").getImage(),
            
new ImageIcon("images/bottom_right.png").getImage()
            );
        panel.setBorder(image_border);

        
        frame.getContentPane().add(panel);
        frame.pack();
        
//frame.setSize(200,200);
        frame.setVisible(true);
    }


}



posted on 2008-05-26 14:20 相信 阅读(872) 评论(0)  编辑  收藏 所属分类: Swing文章


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

公告

不显示applet

常用链接

留言簿(16)

我参与的团队

随笔档案

文章分类

文章档案

新闻档案

相册

swingchina 专业搞Swing的网站

搜索

最新评论

阅读排行榜

评论排行榜