残念ながら、argius さんの示したコードは間違っています。
JAplletはSwingなので、AWT/Java 2Dのコードと混在させることは基本的にはやらないようにします。具体的には paint メソッドのオーバーライドはしてはダメです。paint メソッドは Java 2D による描画のため、Swing では使用できません。
このコードは一見動いているように見えますが、他のコンポーネントと混在させたときに動作がおかしくなります (リペイントがされなかったりします)。
さて、この問題ですが、Java SE 8 を使用できる環境なのであれば、JavaFX を使用するのが最適です。Swingは今後の機能拡張がされないことが決まっているので、新規に作るのであればJavaFXをお勧めします。
JavaFXで作成したアプリケーションは、アプレットとしても動作させることができますし、デスクトップアプリケーションとしても動作可能です。
JavaFXでは四角や丸などの図形もボタンやラベルといった部品もまったく同じように使用することができます。これらの描画要素のスーパークラスであるNodeクラスには拡大・縮小を行うためのメソッドが用意されているので、そのメソッドを使用するだけでズームイン、ズームアウトが可能です。
もちろん、マウスホイールも使用することが可能です。JavaFXの場合、マウスホイールとタッチパネルでのジェスチャーも一緒に扱うためのScrollEventがあります。これを使用すれば、ホイールとタッチパネルでの両方でズームイン・ズームアウトが可能です。
イメージをホイールでズームイン・ズームアウトするサンプルを載せておきますので、参考になさってください。
lang
1import javafx.application.Application;
2import javafx.geometry.Pos;
3import javafx.scene.Scene;
4import javafx.scene.image.Image;
5import javafx.scene.image.ImageView;
6import javafx.scene.layout.StackPane;
7import javafx.stage.Stage;
8
9public class ImageZoom extends Application {
10 private final static double MIN_SCALE = 0.2;
11 private final static double MAX_SCALE = 2.0;
12
13 private double scale = 1.0;
14
15 @Override
16 public void start(Stage stage) {
17 StackPane root = new StackPane();
18 root.setAlignment(Pos.CENTER);
19 root.setPrefSize(600, 600);
20
21 ImageView view = new ImageView(new Image("Duke.png"));
22 root.getChildren().add(view);
23
24 view.setOnScroll(e -> {
25 scale += e.getDeltaY()/1_000;
26 if (scale <= MIN_SCALE) {
27 scale = MIN_SCALE;
28 } else if (scale >= MAX_SCALE) {
29 scale = MAX_SCALE;
30 }
31
32 view.setScaleX(scale);
33 view.setScaleY(scale);
34 });
35
36 Scene scene = new Scene(root);
37 stage.setScene(scene);
38 stage.show();
39 }
40
41 public static void main(String... args) {
42 launch(args);
43 }
44}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/26 23:44
2014/11/27 08:57