| import java.awt.Graphics; |
| import java.awt.Image; |
| import java.awt.image.BufferedImage; |
| import java.io.File; |
| import java.io.IOException; |
| import javax.imageio.ImageIO; |
| |
| public class PicturePanel extends javax.swing.JPanel { |
| // Храним 2 изображения: оригинальное и текущее. |
| // Оригинальное используется для получения текущего в зависимости от размеров панели. |
| // Текущее непосредственно прорисовывается на панели. |
| private BufferedImage originalImage = null; |
| private Image image = null; |
| |
| public PicturePanel() { |
| initComponents(); |
| } |
| |
| private void initComponents() { |
| setLayout(null); |
| addComponentListener(new java.awt.event.ComponentAdapter() { |
| public void componentResized(java.awt.event.ComponentEvent evt) { |
| formComponentResized(evt); |
| } |
| }); |
| |
| } |
| |
| // Реакция на изменение размеров панели - изменение размера изображения. |
| private void formComponentResized(java.awt.event.ComponentEvent evt) { |
| int w = this.getWidth(); |
| int h = this.getHeight(); |
| if ((originalImage != null) && (w > 0) && (h > 0)) { |
| image = originalImage.getScaledInstance(w, h, Image.SCALE_DEFAULT); |
| this.repaint(); |
| } |
| } |
| |
| // Берем прорисовку в свои руки. |
| public void paint(Graphics g) { |
| // Рисуем картинку |
| if (image != null) { |
| g.drawImage(image, 0, 0, null); |
| } |
| |
| // Рисуем подкомпоненты. |
| super.paintChildren(g); |
| // Рисуем рамку |
| super.paintBorder(g); |
| } |
| |
| // Методы для настройки картинки. |
| public BufferedImage getImage() { |
| return originalImage; |
| } |
| |
| public void setImage(BufferedImage image) { |
| this.image = image; |
| } |
| |
| public void setImageFile(File imageFile) { |
| try { |
| if (imageFile == null) { |
| originalImage = null; |
| } |
| BufferedImage bi = ImageIO.read(imageFile); |
| originalImage = bi; |
| } catch (IOException ex) { |
| System.err.println("Неудалось загрузить картинку!"); |
| ex.printStackTrace(); |
| } |
| repaint(); |
| } |
| } |