⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagepainter.java

📁 JAVA的一些源码 JAVA2 STANDARD EDITION DEVELOPMENT KIT 5.0
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)ImagePainter.java	1.8 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.synth;import java.awt.*;import java.net.*;import javax.swing.*;/** * ImagePainter fills in the specified region using an Image. The Image * is split into 9 segments: north, north east, east, south east, south, * south west, west, north west and the center. The corners are defined * by way of an insets, and the remaining regions are either tiled or * scaled to fit. * * @version 1.8, 12/19/03 * @author Scott Violet */class ImagePainter extends SynthPainter {    private Image image;    private Insets sInsets;    private Insets dInsets;    private URL path;    private boolean tiles;    private boolean paintCenter;    private Object renderingHint;    ImagePainter(boolean tiles, boolean paintCenter, Object renderingHint,                 Insets sourceInsets, Insets destinationInsets) {        this.sInsets = (Insets)sourceInsets.clone();        if (destinationInsets == null) {            dInsets = sInsets;        }        else {            this.dInsets = (Insets)destinationInsets.clone();        }        this.tiles = tiles;        this.paintCenter = paintCenter;        this.renderingHint = renderingHint;    }    public ImagePainter(boolean tiles, boolean paintCenter,                        Object renderingHint, Insets sourceInsets,                        Insets destinationInsets, Image image) {        this(tiles, paintCenter, renderingHint, sourceInsets,             destinationInsets);        this.image = image;    }    public ImagePainter(boolean tiles, boolean paintCenter,                        Object renderingHint, Insets sourceInsets,                        Insets destinationInsets, URL path) {        this(tiles, paintCenter, renderingHint, sourceInsets,             destinationInsets);        this.path = path;    }    public boolean getTiles() {        return tiles;    }    public boolean getPaintsCenter() {        return paintCenter;    }    public Object getRenderingHint() {        return renderingHint;    }    public Insets getInsets(Insets insets) {        if (insets == null) {            return (Insets)this.dInsets.clone();        }        insets.left = this.dInsets.left;        insets.right = this.dInsets.right;        insets.top = this.dInsets.top;        insets.bottom = this.dInsets.bottom;        return insets;    }    public Image getImage() {        if (image == null) {            image = new ImageIcon(path, null).getImage();        }        return image;    }    private void paint(Graphics g, int x, int y, int w, int h) {        Image image;        Object lastHint;        Object renderingHint = getRenderingHint();        if (renderingHint != null) {            Graphics2D g2 = (Graphics2D)g;            lastHint = g2.getRenderingHint(RenderingHints.KEY_INTERPOLATION);            if (lastHint == null) {                lastHint = RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR;            }            g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,                                renderingHint);        }        else {            lastHint = null;        }        if ((image = getImage()) != null) {            Insets sInsets = this.sInsets;            Insets dInsets = this.dInsets;            int iw = image.getWidth(null);            int ih = image.getHeight(null);            boolean stretch = !getTiles();            // top left            g.drawImage(image, x, y, x + dInsets.left, y + dInsets.top,                            0, 0, sInsets.left, sInsets.top, null);            // top            drawChunk(image, g, stretch, x + dInsets.left, y,                      x + w - dInsets.right, y + dInsets.top, sInsets.left, 0,                          iw - sInsets.right, sInsets.top, true);            // top right            g.drawImage(image, x + w - dInsets.right, y, x + w,                        y + dInsets.top, iw - sInsets.right, 0, iw,                        sInsets.top, null);            // right            drawChunk(image, g, stretch, x + w - dInsets.right,                      y + dInsets.top, x + w, y + h - dInsets.bottom,                      iw - sInsets.right, sInsets.top, iw,                      ih - sInsets.bottom, false);            // bottom right            g.drawImage(image, x + w - dInsets.right,                        y + h - dInsets.bottom, x + w, y + h,                        iw - sInsets.right, ih - sInsets.bottom, iw, ih,                        null);            // bottom            drawChunk(image, g, stretch, x + dInsets.left,                      y + h - dInsets.bottom, x + w - dInsets.right,                      y + h, sInsets.left, ih - sInsets.bottom,                      iw - sInsets.right, ih, true);            // bottom left            g.drawImage(image, x, y + h - dInsets.bottom, x + dInsets.left,                        y + h, 0, ih - sInsets.bottom, sInsets.left, ih,                        null);            // left            drawChunk(image, g, stretch, x, y + dInsets.top,                      x + dInsets.left, y + h - dInsets.bottom,                      0, sInsets.top, sInsets.left, ih - sInsets.bottom,                      false);            // center            if (getPaintsCenter()) {                g.drawImage(image, x + dInsets.left, y + dInsets.top,                            x + w - dInsets.right, y + h - dInsets.bottom,                            sInsets.left, sInsets.top, iw - sInsets.right,                            ih - sInsets.bottom, null);            }        }        if (renderingHint != null) {            ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_INTERPOLATION,                                             lastHint);        }    }    private void drawChunk(Image image, Graphics g, boolean stretch,                           int dx1, int dy1, int dx2, int dy2, int sx1,                           int sy1, int sx2, int sy2,                           boolean xDirection) {        if (stretch) {            g.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);        }        else {            int xSize = sx2 - sx1;            int ySize = sy2 - sy1;            int deltaX;            int deltaY;            if (xDirection) {                deltaX = xSize;                deltaY = 0;            }            else {                deltaX = 0;                deltaY = ySize;            }            while (dx1 < dx2 && dy1 < dy2) {                int newDX2 = Math.min(dx2, dx1 + xSize);                int newDY2 = Math.min(dy2, dy1 + ySize);                g.drawImage(image, dx1, dy1, newDX2, newDY2,                            sx1, sy1, sx1 + newDX2 - dx1,                            sy1 + newDY2 - dy1, null);                dx1 += deltaX;                dy1 += deltaY;            }        }    }    // SynthPainter    public void paintArrowButtonBackground(SynthContext context,                                           Graphics g, int x, int y,                                           int w, int h) {        paint(g, x, y, w, h);    }    public void paintArrowButtonBorder(SynthContext context,                                       Graphics g, int x, int y,                                       int w, int h) {        paint(g, x, y, w, h);    }    public void paintArrowButtonForeground(SynthContext context,                                           Graphics g, int x, int y,                                           int w, int h,                                           int direction) {        paint(g, x, y, w, h);    }    // BUTTON    public void paintButtonBackground(SynthContext context,                                      Graphics g, int x, int y,                                      int w, int h) {        paint(g, x, y, w, h);    }    public void paintButtonBorder(SynthContext context,                                  Graphics g, int x, int y,                                  int w, int h) {        paint(g, x, y, w, h);    }    // CHECK_BOX_MENU_ITEM    public void paintCheckBoxMenuItemBackground(SynthContext context,                                                Graphics g, int x, int y,                                                int w, int h) {        paint(g, x, y, w, h);    }    public void paintCheckBoxMenuItemBorder(SynthContext context,                                            Graphics g, int x, int y,                                            int w, int h) {        paint(g, x, y, w, h);    }    // CHECK_BOX    public void paintCheckBoxBackground(SynthContext context,                                        Graphics g, int x, int y,                                        int w, int h) {        paint(g, x, y, w, h);    }    public void paintCheckBoxBorder(SynthContext context,                                    Graphics g, int x, int y,                                    int w, int h) {        paint(g, x, y, w, h);    }    // COLOR_CHOOSER    public void paintColorChooserBackground(SynthContext context,                                            Graphics g, int x, int y,                                            int w, int h) {        paint(g, x, y, w, h);    }    public void paintColorChooserBorder(SynthContext context,                                        Graphics g, int x, int y,                                        int w, int h) {        paint(g, x, y, w, h);    }    // COMBO_BOX    public void paintComboBoxBackground(SynthContext context,                                        Graphics g, int x, int y,                                        int w, int h) {        paint(g, x, y, w, h);    }    public void paintComboBoxBorder(SynthContext context,                                        Graphics g, int x, int y,                                        int w, int h) {        paint(g, x, y, w, h);    }    // DESKTOP_ICON    public void paintDesktopIconBackground(SynthContext context,                                        Graphics g, int x, int y,                                        int w, int h) {        paint(g, x, y, w, h);    }    public void paintDesktopIconBorder(SynthContext context,                                           Graphics g, int x, int y,                                           int w, int h) {        paint(g, x, y, w, h);    }    // DESKTOP_PANE    public void paintDesktopPaneBackground(SynthContext context,                                           Graphics g, int x, int y,                                           int w, int h) {        paint(g, x, y, w, h);    }    public void paintDesktopPaneBorder(SynthContext context,                                       Graphics g, int x, int y,                                       int w, int h) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -