Image Panel : Panel « Swing Components « Java

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;

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; = 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) {

    if (component instanceof JScrollPane) {
      JScrollPane scrollPane = (JScrollPane) component;
      JViewport viewport = scrollPane.getViewport();
      Component c = viewport.getView();

      if (c instanceof JComponent) {
        ((JComponent) c).setOpaque(false);

    super.add(component, constraints);

  protected void paintComponent(Graphics g) {

    if (image == null)

    switch (style) {
    case TILED:

    case SCALED:
      Dimension d = getSize();
      g.drawImage(image, 0, 0, d.width, d.height, null);

    case ACTUAL:

  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 =

    // ImagePanel north = new ImagePanel(image, ImagePanel.TILED);
    ImagePanel north = new ImagePanel(image, ImagePanel.ACTUAL);
    JTextArea text = new JTextArea(5, 40);
    JScrollPane scrollPane = new JScrollPane(text);
    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");
    boxes.add(new JCheckBox("Two"));
    south.add(buttons, BorderLayout.NORTH);
    south.add(boxes, BorderLayout.SOUTH);
    JFrame frame = new JFrame();
    frame.getContentPane().add(north, BorderLayout.NORTH);
    frame.getContentPane().add(south, BorderLayout.SOUTH);


Related examples in the same category

1.Yes / No Panel
2.Transparent PanelTransparent Panel
3.Swing Panel GroupSwing Panel Group
4.Swing Panel Group 2Swing Panel Group 2
5.Gradient Panel
6.Transfer focus from button to button with help of arrows keys.Transfer focus from button to button with help of arrows keys.
7.A JPanel with a textured background.
8.Time panel shows the current time.
9.Graph Canvas
10.A basic panel that displays a small up or down arrow.
11.HeatMap is a JPanel that displays a 2-dimensional array of data using a selected color gradient scheme.
12.GradientPanel is a class with a gradient background.
13.A simple JPanel with a border and a title
14.Translucent PanelTranslucent Panel
15.The class makes it easy to select a numerical value, possibly from a given range