Mega Code Archive

 
Categories / Java / Swing Components
 

Image Panel

//package mw.client.utils.gui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JViewport; @SuppressWarnings("serial") public class ImagePanel extends JPanel {   public static final int TILED = 0;   public static final int SCALED = 1;   public static final int ACTUAL = 2;   private BufferedImage image;   private int style;   private float alignmentX = 0.5f;   private float alignmentY = 0.5f;   public ImagePanel(BufferedImage image) {     this(image, TILED);   }   public ImagePanel(BufferedImage image, int style) {     this.image = image;     this.style = style;     setLayout(new BorderLayout());   }   public void setImageAlignmentX(float alignmentX) {     this.alignmentX = alignmentX > 1.0f ? 1.0f : alignmentX < 0.0f ? 0.0f         : alignmentX;   }   public void setImageAlignmentY(float alignmentY) {     this.alignmentY = alignmentY > 1.0f ? 1.0f : alignmentY < 0.0f ? 0.0f         : alignmentY;   }   public void add(JComponent component) {     add(component, null);   }   public void add(JComponent component, Object constraints) {     component.setOpaque(false);     if (component instanceof JScrollPane) {       JScrollPane scrollPane = (JScrollPane) component;       JViewport viewport = scrollPane.getViewport();       viewport.setOpaque(false);       Component c = viewport.getView();       if (c instanceof JComponent) {         ((JComponent) c).setOpaque(false);       }     }     super.add(component, constraints);   }   protected void paintComponent(Graphics g) {     super.paintComponent(g);     if (image == null)       return;     switch (style) {     case TILED:       drawTiled(g);       break;     case SCALED:       Dimension d = getSize();       g.drawImage(image, 0, 0, d.width, d.height, null);       break;     case ACTUAL:       drawActual(g);       break;     }   }   private void drawTiled(Graphics g) {     Dimension d = getSize();     int width = image.getWidth(null);     int height = image.getHeight(null);     for (int x = 0; x < d.width; x += width) {       for (int y = 0; y < d.height; y += height) {         g.drawImage(image, x, y, null, null);       }     }   }   private void drawActual(Graphics g) {     Dimension d = getSize();     float x = (d.width - image.getWidth()) * alignmentX;     float y = (d.height - image.getHeight()) * alignmentY;     g.drawImage(image, (int) x, (int) y, this);   }   public static void main(String[] args) throws Exception {     BufferedImage image = javax.imageio.ImageIO.read(new java.io.File(         "wood3.jpg"));     //     // ImagePanel north = new ImagePanel(image, ImagePanel.TILED);     ImagePanel north = new ImagePanel(image, ImagePanel.ACTUAL);     north.setImageAlignmentY(1.0f);     JTextArea text = new JTextArea(5, 40);     JScrollPane scrollPane = new JScrollPane(text);     north.add(scrollPane);     //     ImagePanel south = new ImagePanel(image, ImagePanel.SCALED);     JPanel buttons = new JPanel();     buttons.add(new JButton("One"));     buttons.add(new JButton("Two"));     JPanel boxes = new JPanel();     JCheckBox j = new JCheckBox("One");     j.setOpaque(false);     boxes.add(j);     boxes.add(new JCheckBox("Two"));     south.add(buttons, BorderLayout.NORTH);     south.add(boxes, BorderLayout.SOUTH);     //     JFrame frame = new JFrame();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.getContentPane().add(north, BorderLayout.NORTH);     frame.getContentPane().add(south, BorderLayout.SOUTH);     frame.pack();     frame.setVisible(true);   } }