• category: swing folder: Zoom title: MouseWheelで画像のズームイン・アウト表示 tags: [MouseWheelListener, ImageIcon, JComponent] author: aterai pubdate: 2006-10-16 pubdate: 2006-10-16T13:11:04+09:00 description: マウスホイールなどで画像をズームイン、ズームアウトします。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTW1yBNHvI/AAAAAAAAAp4/ba6eQ-Ul2sg/s800/Zoom.png

概要

概要

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

サンプルコード

サンプルコード

#spandel
class ZoomImage extends JComponent implements MouseWheelListener {
#spanend
  private final transient ImageIcon icon;
#spanadd
class ZoomImage extends JPanel {
#spanend
  private transient MouseWheelListener handler;
  private final transient Image image;
  private final int iw;
  private final int ih;
  private double scale = 1d;
  public ZoomImage(ImageIcon icon) {
  protected ZoomImage(Image image) {
    super();
    this.icon = icon;
    iw = icon.getIconWidth();
    ih = icon.getIconHeight();
    addMouseWheelListener(this);
    this.image = image;
    iw = image.getWidth(this);
    ih = image.getHeight(this);
  }
  @Override public void paintComponent(Graphics g) {
#spanadd

#spanend
  @Override public void updateUI() {
    removeMouseWheelListener(handler);
    super.updateUI();
    handler = e -> changeScale(e.getWheelRotation());
    addMouseWheelListener(handler);
  }
#spanadd

#spanend
  @Override protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    g2.scale(scale, scale);
    g2.drawImage(icon.getImage(), 0, 0, iw, ih, this);
    g2.drawImage(image, 0, 0, iw, ih, this);
    g2.dispose();
  }
  @Override public void mouseWheelMoved(MouseWheelEvent e) {
    changeScale(e.getWheelRotation());
  }
#spanadd

#spanend
  public void initScale() {
    scale = 1d;
    repaint();
  }
#spanadd

#spanend
  public void changeScale(int iv) {
    scale = Math.max(.05, Math.min(5d, scale - iv * .05));
    repaint();
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルではホイールの上回転で拡大、下回転で縮小しています。

解説

  • 画像の拡大・縮小表示はJPanel#paintComponent(...)をオーバーライドしてGraphics2D#scale(...)で設定
  • 拡大・縮小率はマウスホイールの上方向回転を拡大、下方向回転を縮小として適用

参考リンク

参考リンク

コメント

コメント