概要

マウスホイールなどで画像をズームイン、ズームアウトします。

サンプルコード

class ZoomImage extends JPanel {
  private transient MouseWheelListener handler;
  private final transient Image image;
  private final int iw;
  private final int ih;
  private double scale = 1d;
  protected ZoomImage(Image image) {
    super();
    this.image = image;
    iw = image.getWidth(this);
    ih = image.getHeight(this);
  }
  @Override public void updateUI() {
    removeMouseWheelListener(handler);
    super.updateUI();
    handler = new MouseWheelListener() {
      @Override public void mouseWheelMoved(MouseWheelEvent e) {
        changeScale(e.getWheelRotation());
      }
    };
    addMouseWheelListener(handler);
  }
  @Override protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    g2.scale(scale, scale);
    g2.drawImage(image, 0, 0, iw, ih, this);
    g2.dispose();
  }
  public void initScale() {
    scale = 1d;
    repaint();
  }
  public void changeScale(int iv) {
    scale = Math.max(.05, Math.min(5d, scale - iv * .05));
    repaint();
  }
}
view all

解説

上記のサンプルでは、画像をマウスホイールの上回転で拡大、下回転で縮小してJPanel内に表示しています。

参考リンク

コメント

  • ih = icon.getIconWidth();の部分はgetIconHeight();ではありませんでしょうか? -- syo
    • ご指摘ありがとうございます。スクリーンショットもよく見たら中の画像が正方形になってますね(^^;。修正しておきます。 -- aterai