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);
}
}
Related examples in the same category