Javaの配列を利用して画像をウィンドウズアプリケーションで表示させる方法

このQ&Aのポイント
  • Javaの配列を利用して3つの画像をウィンドウズアプリケーションで縦に並べて表示する方法
  • 画像の表示位置を指定し、ページ上部にタイトルを表示する方法
  • 質問者は配列を利用して画像を表示するプログラムを書いているが、うまく表示されない問題が発生している
回答を見る
  • ベストアンサー

javaの配列について。

javaのプログラミングについてなのですが、配列を利用して、 画像イメージ zu0.jpg,zu1.jpg,zu2,jpgをウィンドウズアプリケーションで 3つ縦に並べて表示させ、ページ上部にタイトルを入れろという課題が出たのですが、 なかなかうまいきません。原因がわからないので質問させていただきます。 どうかお力添えお願いいたします。 ↓↓プログラム文↓↓ import java.awt.*; class PictF extends Frame{ Font f; Image im; PictF(){ setBackground(new Color(200,255,255)); f=new Font("Dialog",Font.ITALIC,36); Image[] im=new Image[3]; for(int i=0;i<im.length;i++) im[i]=Toolkit.getDefaultToolkit().getImage("zu"+i+".jpg"); setTitle("image"); setSize(400,700); } public void paint(Graphics g){ Image[] im=new Image[3]; for(int i=0;i<im.length;i++) g.drawImage(im[0],10,10,this); g.drawImage(im[1],10,100,this); g.drawImage(im[2],10,210,this); g.setFont(f); g.setColor(Color.blue); g.drawString("Ikeda Auditorium",100,240); } public static void main(String[] args){ PictF pf=new PictF(); pf.setVisible(true); } }

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 どのようにうまく行ってないのか記述するようにすると良いと思いますよ。 1. コンストラクタ内でimを要素数3で初期化して画像を取得しています。 2. 次にpaintメソッド内で描画処理を実行していますがここでまたimを初期化しています。 これではg.drawImageをした際にim[0]~im[2]はnullとなりエラーとなります。 (ここがうまく行っていないという所だと思います) しかし元々の1の段階でもまずいです。 そこで定義された変数はローカル変数となりそのメソッド内でしか利用できません。 フィールド変数に用意してあるimを Image[] im = new Image[3]; に変更して コンストラクタ内のImage[] im=new Image[3];を削除してください。 そうするとフィールド変数のimに対して画像が代入されます。 また、paintメソッド内の Image[] im=new Image[3]; for(int i=0;i<im.length;i++) はいりません。 動かしたわけではないので間違えてたらごめんなさい。

hisasori
質問者

お礼

言葉足らずでしたのに、的確なご指摘ありがとうございました。無事動作させることに成功しました。これからも精進します。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

どのようにうまくいかないのでしょうか?

関連するQ&A

  • パネルの絵の差し替え方法

    JBuilderでJavaの開発を勉強しています。 パネルがクリックされるたびに、パネルに張られている絵を差し替えたいのですが最初の2回のクリックではパネルの絵が消えてしまい3回目からのクリックでは問題なく絵は切り替わります。下記のロジックで問題があるのでしょうか? メインフレームのパネルクリックイベントから"public void ChangeImage(int num)"関数を呼びます。 ************************************************* public class New_Panel extends Panel { Image img; Image im_off; Image im_on; //CONSTRUCT public Panel_FD() { im_off = Toolkit.getDefaultToolkit().getImage("OFF.jpg"); im_on = Toolkit.getDefaultToolkit().getImage("ON.jpg");   //初期イメージ img = Toolkit.getDefaultToolkit().getImage("ON.jpg"); } public void paint(Graphics g){ g.drawImage(img, 0, 0, this); } //イメージ変更 public void ChangeImage(int num){ Graphics g; img.flush(); img = this.createImage(100, 40); if (sw == 0) { g = img.getGraphics(); g.drawImage(im_off, 0, 0, this); } else { g = img.getGraphics(); g.drawImage(im_on, 0, 0, this); } //再描画 repaint(); } } *************************************************

    • ベストアンサー
    • Java
  • javaの二次元配列について質問です

    配列上にあるただ一つの1を入力に応じて移動させるプログラムを作っています。 たとえば0が入力されたら 0, 0, 0 0, 1, 0 0, 1, 0 → 0, 0, 0 0, 0, 0 0, 0, 0 という風に移動させ、端に行ったら移動できないようにしたいです。 今書いたプログラムだと、最初にある1が残ったままになってしまいます。 int[] p = {-1, -1}; int[][] im = new int[3][3]; Scanner scn = new Scanner(System.in); for (int i = 0; i < p.length; i++) { p[i] = 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } int n = 0; n = scn.nextInt(); if (n == 0) { p[0] -= 1; } else if (n == 1) { p[1] += 1; } else if (n == 2) { p[0] += 1; } else if (n == 3) { p[1] -= 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); }

  • Javaを説明するには

    4枚の絵をパラパラアニメにするソースなのですが。これをわけ合って説明しなくてはならなくなってしまいました。 薄らぼんやりとはわかるのですが。どう説明したらいいのかさっぱり分かりません、どう説明すれば、分かりやすく正しく伝えられるでしょうか?>< import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class DNA extends Applet implements Runnable, ActionListener { Image image[] = new Image[4]; int[] timing = { 400,350,230,350}; Thread t; int index1 = 0; int no = 0; private static final long serialVersionUID = 1L; public void init(){ for(int i = 0; i<4; i++){ image[i] = getImage(getDocumentBase(),"img"+(i)+".gif"); } } public void paint(Graphics g){ g.drawImage(image[index1],0,0,this); } public void update(Graphics g) { paint(g); if(++no==4)no=0; } public void start(){ t = new Thread(this); t.start(); } public void run() { while(true){ index1++; if(index1 == 4){ index1 = 0; } repaint(); try{ Thread.sleep(timing[no]); }catch(InterruptedException e){} }} public void actionPerformed(ActionEvent arg0) { } }

  • JAVAの文法について教えてください。

    JAVAを学習しはじめたばかりの初心者です。 下記のプログラムに関してわからないので教えてください。 下記はtest.gif画像を表示するプログラムなのですが、 イメージを表示するために import java.awt.Graphicsをインポートして、 Image im でオブジェクトを宣言するのはわかるのですが、 通常はこの後に im = new Image() のようにインスタンス化する必要があると思うのですが、 このプログラムにはありません。 なぜ不要なのでしょうか? ********************** import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; public class MyImage extends Applet{ Image im; public void init(){ im = getImage( getDocumentBase(), "test/test.gif" ); } public void paint(Graphics g){ g.drawImage( im ,10,10, this); } }

    • ベストアンサー
    • Java
  • 意味がわかりません

    この部分の意味がわからなくて困っています。わかる方いましたら解説をお願いします。m(_ _)m public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; if(f==0){ bufferGraphics.drawImage(image,0,0,this); bufferGraphics.setColor(Color.white); for(int i=0;i<h;i+=2){ bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); f = 1; } else if(f==1) { bufferGraphics.drawImage(image,0,0,this); bufferGraphics.setColor(Color.white); for(int i=1;i<h;i+=2){ bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); f = 0; } }

    • ベストアンサー
    • Java
  • Javaアプレットとマルチスレッドの組み合わせ

    Javaアプレットとマルチスレッドを組み合わせてパラパラ漫画のようなものを作りたいのですがうまくいきません。 import java.awt.Graphics; import java.awt.Image; public class kadai4 extends java.applet.Applet implements Runnable{ Image logoImage[]; Thread runner; int current; int last=6; public void init(){ logoImage=new Image[last]; for(int i=0;i<last;i++){ logoImage[i] = getImage(getCodeBase(),"image/logo" + (i+1) + ".gif"); } } public void start(){ if(runner == null){ runner = new Thread(this); runner.start(); } } public void stop(){ if(runner != null){ runner.stop(); runner=null; } } public void run(){ while(true){ for(int i=0;i<last;i++){ current=i; repaint(); pause(400); } } } public void paint(Graphics g){ g.drawImage(logoImage[current],50,25,50,50,this); } void pause(int time){ try { Thread.sleep(time);} catch (InterruptedException e) {} } } これを実行すると推奨されない API を使用またはオーバーライドしています。というエラーが発生するのですがどうすれば良いでしょうか?他の方法でも構いません

    • ベストアンサー
    • Java
  • Javaの二次元配列についてです

    配列要素を 1, 2, 3, 4, 5 2, 2, 3, 4, 5 3, 3, 3, 4, 5 4, 4, 4, 4, 5 5, 5, 5, 5, 5 のようにしたいのですがどうすればよろしいでしょうか? int[][] a = new int[5][5]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { ~ここの処理を教えてください~ } }

    • ベストアンサー
    • Java
  • java.lang.ClsaaCastExceptionで教えてください。

    以下はiアプリで画像を3枚順番に表示し、3番目の画像が表示されたときに選択キーを押すと点数が加算される内容です。 コンパイルは通りましたが、エミュレータで実行すると、Main:java. lang.ClassCastException AnimeIAppというエラーが出ます。 ご指導お願いいたします。 import com.nttdocomo.ui.*; public class AnimeIApp extends IApplication{ public void start(){ Display.setCurrent (new AnimeCanvas()); } } public class AnimeCanvas extends Canvas implements Runnable{ int imgInx; Image[] imgs; boolean isStopped; int score=0; Image animeImg[]=new Image[3]; MediaImage mI; public AnimeCanvas(){ for(int i=0;i<3; i++){ mI=MediaManager.getImage("resource:///"+i+".gif"); try {mI.use();} catch(Exception e){} } doStart(); } private void doStart(){ isStopped=false; Thread th=new Thread(this); th.start(); } private void doStope(){ isStopped=true; } public void run(){ imgInx=0; while(! isStopped){ try{ repaint(); Thread.sleep(500); imgInx++; if(imgInx>=imgs.length){ imgInx=0; } }catch(Exception e){} } } public void precessEvent(int type,int param){ if(type==Display.KEY_PRESSED_EVENT){ if(param==Display.KEY_SELECT && imgInx==2){ score++; } } } public void paint(Graphics g){ g.setColor(g.getColorOfRGB(255,255,255)); g.fillRect(0,0,getWidth(),getHeight()); g.drawImage(imgs[imgInx],0,0); g.setColor(g.getColorOfRGB(0,0,0)); g.drawString("スコア"+ score ,100,100); } }

  • Javaゲーム

    import java.applet.Applet; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.awt.event.KeyEvent.*; import java.awt.image.BufferStrategy; import java.awt.Image; public class sinkeisuijaku extends JApplet implements ActionListener{ int okcnt = 0; int Imclick[] = new int[2]; int opnImg = 0; int n = -1; int sw = -1; boolean flag = false; boolean KeySpace; int indx1 = 0; int pict1[] = new int[36]; int ch[] = new int[36]; int ran[] = new int[36]; int i,j,y; int GameTitle = 0; int GameRuleGamen = 1; int actionPerformed = 2; int gamestate; int scene; Thread gameThread; boolean keySpace; BufferStrategy bstrategy; Graphics g = bstrategy.getDrawGraphics(); Image ImageIcon; Image GameTitle,GameRuleGamen; Image offImage; int Image1[] = new int[36]; Icon fruit = new ImageIcon("hgi19.gif"); Icon hgif[] = new Icon[18]; JPanel pan1,pan2,pan3; JButton btn[] = new JButton[36]; JButton sbtn = new JButton("はじめ!!"); JTextField tx = new JTextField("Second"); public void init(){ (以下関係ないので省略) } public void start() { if(gameThread == null) { gameThread = new Thread(this); gameThread.start(); } } public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { break; } public void stop(){ gameThread = null; } public void run(){ while (gameThread == Thread.currentThread()) { switch (gamestate) { case 0:GameTitle(); break; case 1:GameRuleGamen(); break; } try { Thread.sleep(20); } catch (InterruptedException e) { break; } } } public void GameTitle() { if (keySpace)scene =1; Graphics gv = offImage.getGraphics(); gv.clearRect(0, 0, 500, 500); gv.setColor(Color.PINK); gv.setFont(new Font("SansSerif", Font.BOLD, 28)); gv.drawString("★神経衰弱☆", 25, 180); gv.setFont(new Font("SansSerif", Font.PLAIN, 22)); gv.drawString("PRESS SPACE KEY!!", 70, 350); GameTitle = getImage(getDocumentBase(), "fruit.gif"); gv.drawImage(GameTitle, 500, 500, null); repaint(); } public void GameRuleGamen() { if (keySpace) scene = 2; Graphics gv = offImage.getGraphics(); gv.clearRect(0, 0, 500, 500); gv.setColor(Color.PINK); gv.setFont(new Font("SansSerif", Font.BOLD, 28)); gv.drawString("☆ルール説明★", 25, 180); GameRuleGamen = getImage(getDocumentBase(), "fruit.gif"); gv.drawImage(GameRuleGamen, 500, 500, null); repaint(); } public void actionPerformed(ActionEvent e){ (以下関係ないので省略) } 現在Javaでゲームを作っています。どんなのかを詳しく説明しますと、 タイトル画面(スペースキーを押せば次の画面に切り替わる) ↓ ルール説明画面(スペースキーを押せば次の画面に切り替わる) ↓ ゲーム画面 こんな感じです。 ですが、タイトル画面、ルール説明画面、そしてそれらの画像がなかなか表示されません。 あと実行してみたら… sinkeisuijaku.java:95: 式の開始が不正です。 public void stop(){ ^ エラー 1 個 というエラーが発生しました。 誰か教えていただけないでしょうか?タイトル画面、ルール画面、画像読み込みのプログラムソースと一緒に教えて下さると有難いです。

  • javaのlengthに対して質問です

    javaのlengthに対して質問です public class Gauss { public static void main(String[] args){ int[] ia = new int[101]; for (int i = 0 ; i<ia.length;i++); } } 今の場合 ia.lengthはどれくらいの長さですか? ia だから2?

    • ベストアンサー
    • Java