Swingへ戻る | サンプル集目次へ戻る

実行結果
Gachoooonサンプルソース
往年の名ギャグ「ガチョーン」とjavax.swing.JScrollBarのステキでキュートなマリアージュ。スクロールバーの上下に伴い、拡大縮小する画像。その味わいを、じっくりとご堪能ください。
Gachoooon.java
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "Gachoooon"
 * Gachoooon.java 「JScrollBarで画像を拡大縮小」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac Gachoooon.java
 *     >java Gachoooon
 * 【キーワード】
 *     最大値(maximum), 最小値(minimum), 現在値(current value), 範囲(extent), 
 *     方向(orientation), 垂直(vertical), 水平(horizontal), 谷啓
 * 【試してみよう】
 *     横スクロールバーで「ガチョーン」。
 *     JScrollBarの最大値、最小値、ツマミの長さを変えてみる。
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.lang.String;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;

public class Gachoooon extends JFrame implements AdjustmentListener {
    DrawPanel I00;

    public Gachoooon() {
        JScrollBar L00 = new JScrollBar(JScrollBar.VERTICAL);
        L00.addAdjustmentListener(this);
        add(L00, BorderLayout.EAST);

        I00 = new DrawPanel(L00.getMaximum() - L00.getVisibleAmount());
        add(I00, BorderLayout.CENTER);
    }
    
    public void adjustmentValueChanged(AdjustmentEvent A00) {
        I00.M00(A00.getValue());
        I00.repaint();
    }

    public static void main(String[] A00) {
        Toolkit.getDefaultToolkit().setDynamicLayout(true);

        Gachoooon L00 = new Gachoooon();
        L00.setTitle("谷啓になったつもりで!");
        L00.setDefaultCloseOperation(EXIT_ON_CLOSE);
        L00.setBackground(Color.white);
        L00.pack();
        L00.setVisible(true);
    }
}

class DrawPanel extends JPanel {
    static final String C00 = "image/gachoooon.gif";
    private Image I00;
    private int I01;    // 幅
    private int I02;    // 高さ
    private int I03;    // 最大値
    private int I04;    // 現在値

    public DrawPanel(int A00) {
        this.I03 = A00;

        setBackground(Color.white);

        I00 = new ImageIcon(C00).getImage();
        I01 = I00.getWidth(this);
        I02 = I00.getHeight(this);

        setPreferredSize(new Dimension(I01, I02));
    }

    public void paintComponent(Graphics A00) {
        super.paintComponent(A00);

        int L00 = I01 * I04 / I03;
        int L01 = I02 * I04 / I03;

        A00.drawImage(I00,(getWidth() - L00) / 2, (getHeight() - L01) / 2,
                L00, L01, this);
    }

    public void M00(int A00) {
        this.I04 = A00;
    }
}

/* ■ クラスの外でちょっと一言 ■
JScrollBarを構成する要素は、最小値、最大値、現在値、表示範囲(=ツマミの長
さ)の4つ。ツマミを動かせばAdjustmentEventが発生し、そのイベントでツマミ
の位置を取得することができます。

デフォルトでは、最小値=0、最大値=100、現在地=0、ツマミの長さ=10のスク
ロールバーが生成されます。では、そのデフォルトのスクロールバーが返す最大
の値はいくつになるでしょう? 答えは、最大値(100)−ツマミの長さ(10)の90
です。

そもそもスクロールバーとは、広い領域の一部分を表示するためにあるもの。ツ
マミの長さは表示する範囲を表します。ですので、この例でいえば、90の位置か
ら10の分量を表示すれば、全体の100を表示することが可能で、スクロールバー
の機能としてはこれで充分なわけです。

そういう観点からすると、画像の拡大縮小にスクロールバーを使うのは邪道で、
スライダー(JSlider)の方が適切と思われます。でも今回は、ウィンドウの右側
にある見慣れたスクロールバーで「ガチョーン」をするのが面白さなんで、ご勘
弁を。

最後に、近頃の若いもんに忠告。ただズルッとスクロールバーを下げるなんて野
暮なマネはしないように。下の方で細かく上下に動かして「ガチョーン」のカメ
ラワークを再現するんだぞ。頼むからな。
 */
↑ 先頭へ戻る

安永ノリカズのゲーム制作&Javaサンプル集 / Java初心者用サンプル集『愛のJava256本ノック』