01: /*
02: * ImageLabel.java
03: *
04: * Created on November 22, 2006, 9:53 AM
05: *
06: * Copyright 2006-2007 Nigel Hughes
07: *
08: * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
09: * in compliance with the License. You may obtain a copy of the License at http://www.apache.org/
10: * licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12: * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
13: * governing permissions and limitations under the License.
14: */
15:
16: package com.blogofbug.swing.components;
17:
18: import java.awt.Dimension;
19: import java.awt.Graphics;
20: import java.awt.Graphics2D;
21: import java.awt.Image;
22: import java.awt.RenderingHints;
23: import java.awt.image.ImageObserver;
24: import javax.swing.ImageIcon;
25: import javax.swing.JButton;
26:
27: /**
28: * A simple component that scales an image to fit inside the size of the component.
29: * @author nigel
30: */
31: public class ImageLabel extends JButton {
32: /**
33: * The image that ends up getting scaled
34: */
35: protected ImageIcon imageIcon = null;
36:
37: /**
38: * Creates a new instance of ImageLabel. The prefered width and height will
39: * be set to the dimensions of the image
40: *
41: * @param icon The image to display
42: */
43: public ImageLabel(ImageIcon icon, String name) {
44: super ();
45: if (name != null)
46: setName(name);
47: this .setIcon(icon);
48: this .imageIcon = icon;
49: setPreferredSize(new Dimension(icon.getIconWidth(), icon
50: .getIconHeight()));
51: setOpaque(false);
52: }
53:
54: /**
55: * Creates a new instance of ImageLabel, setting the preferred rendering size to
56: * the supplied dimensions
57: *
58: * @param icon The image to place on the label
59: * @param width The prefered width
60: * @param height The prefered height
61: */
62: public ImageLabel(ImageIcon icon, int width, int height, String name) {
63: this (icon, name);
64: setPreferredSize(new Dimension(width, height));
65: }
66:
67: /**
68: * Paints the label scaling the image to the appropriate size
69: * @param graphics The graphics context
70: */
71: public void paintComponent(Graphics graphics) {
72: Image image = imageIcon.getImage();
73: ImageObserver observer = imageIcon.getImageObserver();
74: ((Graphics2D) graphics).setRenderingHint(
75: RenderingHints.KEY_ANTIALIASING,
76: RenderingHints.VALUE_ANTIALIAS_ON);
77: ((Graphics2D) graphics).setRenderingHint(
78: RenderingHints.KEY_INTERPOLATION,
79: RenderingHints.VALUE_INTERPOLATION_BILINEAR);
80: graphics.drawImage(image, 0, 0, getWidth(), getHeight(), 0, 0,
81: image.getWidth(observer), image.getHeight(observer),
82: observer);
83: }
84: }
|