读书人

在JPanel下根据JFrame的大小动态调整图

发布时间: 2012-12-23 11:28:15 作者: rapoo

在JPanel上根据JFrame的大小动态调整图片大小

?

本方法就是计算出JPanel上的图片的左上角起始点坐标x,y,根据它来画出图片

?

?

?

?

import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import javax.imageio.ImageIO;import javax.swing.*;public class AutoResize extends JPanel {    BufferedImage image;    public AutoResize(BufferedImage image) {        this.image = image;    }    protected void paintComponent(Graphics g) {        super.paintComponent(g);        Graphics2D g2 = (Graphics2D)g;        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,                            RenderingHints.VALUE_INTERPOLATION_BICUBIC);        int w = getWidth();        int h = getHeight();        int iw = image.getWidth();        int ih = image.getHeight();        double xScale = (double)w/iw;        double yScale = (double)h/ih;        double scale = Math.min(xScale, yScale);    // scale to fit                       //Math.max(xScale, yScale);  // scale to fill        int width = (int)(scale*iw);        int height = (int)(scale*ih);        int x = (w - width)/2;        int y = (h - height)/2;        g2.drawImage(image, x, y, width, height, this);    }    public static void main(String[] args) throws IOException {        String path = "images/bison.jpg";        BufferedImage image = ImageIO.read(new File(path));        AutoResize test = new AutoResize(image);        JFrame f = new JFrame();        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        f.add(test);        f.setSize(400,400);        f.setLocation(200,200);        f.setVisible(true);    }}
?

读书人网 >编程

热点推荐