質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

Q&A

1回答

1099閲覧

ウィンドウにあらかじめ表示する画像と、ドラックすると表示される画像

beginner11111

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

0グッド

0クリップ

投稿2020/11/11 08:16

編集2020/11/11 08:43

前提・実現したいこと

プログラムを実行すると、ウィンドウが立ち上がり、あらかじめ日本地図が表示され、ドラッグするとお寺の画像が複数表示さされるプログラム(アプリケーション)を作成したいです。
作成してみたのですが、ドラッグすると、あらかじめ表示される日本地図が常に表示されてしまいます。寺の画像は複数枚切り替わってくれるので問題なしです。
ドラッグしても日本地図の画像をさせないようにするにはどうすればいいですか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

java

1import java.awt.*; 2import java.awt.event.*; 3import java.applet.AudioClip; 4import javax.swing.JApplet; 5 6public class Project2020_2a extends Frame { 7 8 /* 9  ここは、プログラムのどこからでも使いたい 変数などを宣言しておくフィールドです。 10  変数や、オブジェクトの入れものを用意しています。 11 */ 12 // マウスのx座標の記録用変数 Mx, y座標の記録用変数 Myです。 13 int Mx = 0, My = 0; 14 // 15 // gを、標準グラフィクス描画対象として使います。 16 Graphics g; 17 // 18 // g2を、高度なグラフィクス機能(Graphics2D)を使う場合の描画対象として使います。 19 Graphics2D g2; 20 // 21 // Frame部品の一種である自分を、リスナーオブジェクトから呼び出せるようにするために、 22 // 入れ物 myFrame を用意します 23 Frame myFrame; 24 // 25 // 画像ファイルから読み込む複数の画像を入れるためのオブジェクトです 26 //(今回は配列として用意)。 27 Image img[]; 28 // 29 // 音声ファイルを入れるためのオブジェクトです(今回は配列として用意)。 30 AudioClip ac[]; 31 // 32 // ボタン部品の入れ物 bt1 を用意します。 33 Button bt1; 34 // 35 // 描画する画像番号を指定するための変数です(ドラッグ動作ごとに0~9を循環させます)。 36 int m = 0; 37 38 // 39 ////////////////////////////////////////// 40 //① このプログラムの起動 41 ////////////////////////////////////////// 42 public static void main(String[] args) { 43 //② このプログラム本体の生成 44 Project2020_2a pj = new Project2020_2a(); // ③へ 45 } 46 47 //③ このプログラムの生成内容 (この部分はコンストラクタと呼ぶ) 48 public Project2020_2a() { 49 //④ ウインドウタイトルの設定 50 super("Project2020 ProKisoB"); 51 52 // 自分自身(this) を、どこからでも呼び出せるように myFrame に代入しておきます。 53 myFrame = this; 54 // 55 // このアプリケーションが持つ描画面を受け取り、gという名前で呼び出せるようにします。 56 g = myFrame.getGraphics(); 57 // 58 // Graphics2Dの機能を使う場合は、g2として呼び出せるようにします。 59 g2 = (Graphics2D) g; 60 // 61 // 背景を明るい灰色に着色します。 62 setBackground(new Color(200, 245, 245)); 63 // 64 65 // 66 // 用意しておいた10枚の画像を順番に画像用配列img[]に読み込み、 67 //プログラム中で利用できるようにしています。 68 //  ファイル名は T0.GIF~T9.GIF ですが、for文で数字部分を変えながら 69 // ファイル名を指定しています。 70 Toolkit tk = getToolkit(); 71 72 73 img = new Image[8]; 74 for (int i = 0; i < 8; i++) { 75 img[i] = tk.getImage("src/images/T" + i + ".GIF"); 76 } 77 78 // 用意しておいた3つの音を順番に音の格納用配列に読み込み、 79 // プログラム中で利用できるようにしています。 80 int numSounds = 3; 81 ac = new AudioClip[numSounds]; 82 83 for (int i = 0; i < numSounds; i++) { 84 ac[i] = JApplet.newAudioClip(getClass().getClassLoader().getResource("sounds/ss"+i+".wav")); 85 } 86 // 87 //ボタンの組み込み 88 bt1 = new Button("<何かが起きるボタン>"); 89 // 画面にボタンを貼り付けます。2コ以上作成すると順番に左から並びます。 90 this.setLayout(new BorderLayout()); 91 92 this.add(bt1, BorderLayout.NORTH); 93 // ボタンbt1に リスナー(ボタンの場合はアクションリスナー)を貼り付けます。 94 bt1.addActionListener(new ActionListener() { 95 public void actionPerformed(ActionEvent ae) { 96 // ボタンを押した際に、画面を消して、paintメソッドを呼んでいます。 97 // これにより最初の画面を再描画しています。 98 repaint(); 99 // 0番の音を再生させています。 100 ac[2].play(); 101 } 102 }); 103 104 /////////////////////////////////////////////////////////////////////////// 105 // (1)マウスの瞬間動作に反応する「イベントリスナー」MouseListenerの登録 106 /////////////////////////////////////////////////////////////////////////// 107 this.addMouseListener( 108 new MouseAdapter() { 109 // ①マウスがクリックされたときの処理 110 public void mouseClicked(MouseEvent e) { 111 System.out.println("(1)クリックされました..."); 112 //マウスの位置に画像を描画しています。 113 //また、描画のたびに画像番号を切り替えています)。 114 Graphics g = myFrame.getGraphics(); 115 m++; 116 m = (m > 9) ? 0 : m; 117 g.drawImage(img[m], e.getX(), e.getY(), myFrame); 118 } 119 120 // ②マウスカーソルが画面内に入ったときの処理 121 public void mouseEntered(MouseEvent e) { 122 System.out.println("(2)画面に入りました..."); 123 ac[0].play(); 124 } 125 126 // ③マウスカーソルが画面から出たときの処理 127 public void mouseExited(MouseEvent e) { 128 System.out.println("(3)画面から出ました..."); 129 } 130 131 // ④マウスボタンが押されたときの処理 132 public void mousePressed(MouseEvent e) { 133 System.out.println("(4)ボタンが押されました..."); 134 ac[1].play(); 135 } 136 137 // ⑤マウスボタンを放したときの処理 138 public void mouseReleased(MouseEvent e) { 139 System.out.println("(5)ボタンが放されました..."); 140 } 141 }); 142 143 /////////////////////////////////////////////////////////////////////////// 144 // (2)マウスの連続動作に反応する「イベントリスナー」MouseMotionListenerの登録 145 /////////////////////////////////////////////////////////////////////////// 146 this.addMouseMotionListener( 147 new MouseMotionAdapter() { 148 // ⑥ドラッグしたときの処理 149 @Override 150 public void mouseDragged(MouseEvent e) { 151 System.out.println("(6)マウスドラッグ中です..."); 152 //マウスの位置に画像を描画しています。 153 //また、描画のたびに画像番号を切り替えています)。 154 Graphics g = myFrame.getGraphics(); 155 m++; 156 m = (m > 9) ? 0 : m; 157 g.drawImage(img[m], e.getX(), e.getY(), myFrame); 158 } 159 160 // ⑦マウスを動かしたときの処理 161 @Override 162 public void mouseMoved(MouseEvent e) { 163 System.out.println("(7)マウス移動中です..."); 164 } 165 }); 166 167 //⑤ ウィンドウを閉じるための動作の設定 168 addWindowListener(new SampleWindowListner()); 169 //⑥ ウィンドイの表示サイズの設定 170 setSize(600, 600); 171 //⑦ ウィンドウ部品(Frame)を表示させる(指示しないと表示されない) 172 setVisible(true); 173 //⑧ 表示のための処理 ⑨へ 174 } 175 176 ////////////////////////////////////////////////////////////////////////////////////// 177 // 背景として描いておきたい画像や図形は、paintメソッドの中で描いておきましょう。 178 // マウスのイベント処理の中からpaintメソッドを呼びたいときは、直接は呼ばずに、 179 // repaint(); という命令で間接的に呼びます。 180 // ただし、そのときには、それまでの画面は一度消されてから、描き直しが行われます。 181 public void paint(Graphics g) { 182 this.g = g; 183 //⑩ 描画用部品gに文字列を書き込む ()内に,文字列,x座標,y座標を書く 184 //文字フォントを作成します。 185 Font f = new Font("TimesRoman", Font.BOLD, 12); 186 // フォントを画面に設定します。 187 g.setFont(f); 188 g.setColor(Color.BLUE); 189 g.drawString("==  2020 ==", 50, 50); 190 g.setColor(new Color(100, 200, 100)); 191 g.drawString("背景として、最初に書いておきたい画像や図形は、paintメソッドで描いておきます", 50, 80); 192 193 g.drawImage(img[0], 100, 100, this); 194 } 195 196 // ウィンドウを閉じる動作で行う処理(変更不要) 197 class SampleWindowListner extends WindowAdapter { 198 199 public void windowClosing(WindowEvent e) { 200 201 System.exit(0); 202 } 203 } 204 205}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

T0からT7まで画像があり、T0は日本地図、T1~T7は寺の画像です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

はっきり言って何が何だかわかりませんが、↓のようなエラーが実行時に出ていませんか?

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8

T0からT7まで画像があり

m = (m > 9) ? 0 : m;
これではT9まで行ってしまいます。

投稿2020/11/12 09:26

編集2023/08/12 15:34
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問