Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

このプログラムをどう書き足せばいいんでしょうか・・・。

1つのフレームに1つの画像を出力出来るのですが・・・2つのフレームに違う画像を出力させるにはどのように書き直せばいいのでしょうか。。

よかったら教えてくださいσ(>_<。)




public class ImageFrame extends Applet  {

  private BufferedImage offScreen = null;   
 
  public ImageFrame() {
  
   try{
      offScreen = ImageIO.read(new File("a.jpg"));
      MediaTracker mediaTracker = new MediaTracker(this);
      mediaTracker.addImage(offScreen,0);
      mediaTracker.waitForID(0);
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

  public void paint(Graphics g){
    if(offScreen != null){
      
      Graphics2D g2d = (Graphics2D)g;   
      g2d.drawImage(offScreen,0,0,offScreen.getWidth(),offScreen.getHeight(),this); 
     
    }
  }
  
  public static void main(String[] args) {
    JFrame owner = new JFrame("画像");
    owner.setSize(new Dimension(645,513));
    owner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    owner.setLocationRelativeTo(null);
    ImageFrame imgFrame = new ImageFrame();
    owner.getContentPane().add(imgFrame);
    owner.setVisible(true);
  }

18

回答

79184

閲覧

18件の回答

評価

0

どこまで理解できていますか。

評価

0

フレームという言葉が気に入らないけれども。。。
今は、Appletを継承したImageFrameクラスに
offScreenを表示されてますよね。
なので、2つのフレーム(私ならJPanelを使うかな。。。)
を用意する。
その後、2つの画像を用意して、それぞれに表示。。。
答えになってないけれども、流れは、こんな感じ。。。
http://www.javaroad.jp/bbs/answer.jsp?q_id=20061023135027160

評価

0

うーん…。「フレーム」というから、

  public static void main(String[] args) {
    JFrame owner = new JFrame("画像");
    owner.setSize(new Dimension(645,513));
    owner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    owner.setLocationRelativeTo(null);
    ImageFrame imgFrame = new ImageFrame();
    owner.getContentPane().add(imgFrame);
    owner.setVisible(true);

    JFrame owner2 = new JFrame("画像");
    owner2.setSize(new Dimension(645,513));
    owner2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    owner2.setLocationRelativeTo(null);
    ImageFrame imgFrame2 = new ImageFrame2();
    owner2.getContentPane().add(imgFrame2);
    owner2.setVisible(true);
  }

こういうことかと思ったんですが? これで画像を変えたいと。

…というように、質問があいまいだと的確な答えが出しずらいのです > 質問者

評価

0

レスありがとうございます(><;)
mioさん場合、例えばa.jpg,b.jpgの画像を使うとすれば以下の部分どう変えればいいのでしょうか。お手数おかけしますがよろしくお願いします。。
public class ImageFrame extends Applet  {

  private BufferedImage offScreen = null;   
 
  public ImageFrame() {
  
   try{
      offScreen = ImageIO.read(new File("a.jpg"));
      MediaTracker mediaTracker = new MediaTracker(this);
      mediaTracker.addImage(offScreen,0);
      mediaTracker.waitForID(0);
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

  public void paint(Graphics g){
    if(offScreen != null){
      
      Graphics2D g2d = (Graphics2D)g;   
      g2d.drawImage(offScreen,0,0,offScreen.getWidth(),offScreen.getHeight(),this); 
     
    }
  }

評価

0

「変えたいところを、外から与えるようにする」と考えてください。
これは大きなプログラムを作るときの基本で、絶対に押さえておく必要のある考え方です。
「外から与える」というのは、簡単に言えば「引数にする」ということです。

評価

0

なんかmioっって・・・・

評価

0

>>mioさん

う〜ん、うまくコンパイルも通らずエラーメッセージもよく分かりません・・・(>_<。)

評価

0

同じように以下のように書いてみたのですが・・・
public ImageFrame2(){ の所でエラーのようでメソッドの宣言が不正です。戻り値の型が必要です。

と出ます。どこをどう直したらいいのでしょうか。

public class ImageFrame extends Applet  {

  private BufferedImage offScreen = null;  
  private BufferedImage offScreen2= null; 
 
  public ImageFrame() {
  
   try{
      offScreen = ImageIO.read(new File("a.jpg"));
      MediaTracker mediaTracker = new MediaTracker(this);
      mediaTracker.addImage(offScreen,0);
      mediaTracker.waitForID(0);
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

  public void paint(Graphics g){
    if(offScreen != null){
      
      Graphics2D g2d = (Graphics2D)g;   //
      g2d.drawImage(offScreen,0,0,offScreen.getWidth(),offScreen.getHeight(),this); //
     
    }
  }

  public ImageFrame2() {
  
   try{
      offScreen2 = ImageIO.read(new File("b.jpg"));
      MediaTracker mediaTracker = new MediaTracker(this);
      mediaTracker.addImage(offScreen2,0);
      mediaTracker.waitForID(0);
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

  public void paint(Graphics g){
    if(offScreen2 != null){
      
      Graphics2D g2d = (Graphics2D)g;   //
      G2d.drawImage(offScreen2,100,100,offScreen2.getWidth(),offScreen2.getHeight(),this); //
     
    }
  }

評価

0

Javaの基本的なことを理解していないので、わけの分からない状態なっています。

1.ImageFrameこのクラスにはImageFrame以外のコンストラクタが含まれています。
これがエラーの原因です。

2.mioさんが書いている
>「外から与える」というのは、簡単に言えば「引数にする」ということです。
この部分が理解できなかったのか?まったく反映されていません。

>「引数にする」ということが理解できますか?

もう少しJavaのクラスその他について内容を理解しないと、先に進むことが出来ないと思います・・

http://www.javaroad.jp/index_basic.htm#class
このあたりを、もう少し勉強してみてください。

評価

0

>>tamaさん

>1.ImageFrameこのクラスにはImageFrame以外のコンストラクタが含まれています。
これがエラーの原因です。

とは、分かりやすく言うとどうゆうことなのでしょうか。。

ちょっと明日までに実行させておきたい理由があって・・・・。

評価

0

>ちょっと明日までに実行させておきたい理由があって・・・・。
冷たく聞こえるかもしれませんが、それは回答する側にとってはどうでもいいことです。

基本的なことは、あんまり分かりやすく言い換えることができません。
コンストラクタというのがどういうものかを、理解しましょう。

評価

0

冷たい一言ありがとうございます

いろいろ読んではいるのですが、具体的にどの部分の書き方が間違っていて、いらなかったりするのか教えて欲しいのですが・・・・

どなたでもいいのでよろしくお願いします。。

評価

0

明日までにできるかなぁ。。
ドキドキですねwww

評価

0

サンプルをお作りしたいのですが、
>1つのフレームに1つの画像を出力出来るのですが・・・2つのフレームに違う画像を出力させるにはどのように書き直せばいいのでしょうか。。

とのことですが、
mioさまが 書かれたソース
ここから
 public static void main(String[] args) {
    JFrame owner = new JFrame("画像");
    owner.setSize(new Dimension(645,513));
    owner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    owner.setLocationRelativeTo(null);
    ImageFrame imgFrame = new ImageFrame();
    owner.getContentPane().add(imgFrame);
    owner.setVisible(true);

    JFrame owner2 = new JFrame("画像");
    owner2.setSize(new Dimension(645,513));
    owner2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    owner2.setLocationRelativeTo(null);
    ImageFrame imgFrame2 = new ImageFrame2();
    owner2.getContentPane().add(imgFrame2);
    owner2.setVisible(true);
  }
ここまで、
は、理解されましたか?

評価

0

具体的に書いてもいいんですが、それでは何の力にもなりません。
自分で考えることこそ、力になります。

評価

0

ImageFrameクラスのコンストラクタは、どれですか?
コンストラクタには、引数が渡せることをご存知ですか?

この2点が理解できれば、解決すると思うのですが
コンストラクタがどれだか分からない、というような状態だと解決できません。

評価

0

>>hogehogeさん
ありがとうございます(>_<。)
そー言ってもらえるとほんと嬉しいです!!
そこまでのソースはなんとなく程度しか。。。

>>tamaさん
コンストラクトに引数を渡せることは分かったのですが、どれがなのか・・・

評価

0

import java.awt.*;
import java.awt.image.*;
import java.io.*;

import javax.imageio.*;

//
public class ImageBuilder {

  //
  private MediaTracker mediaTracker = null;
  //
  private BufferedImage image = null;

  //
  public ImageBuilder(String path) {
    try{
      image = ImageIO.read(new File(path));
      mediaTracker = new MediaTracker(new Component(){});
      mediaTracker.addImage(image,0);
      mediaTracker.waitForID(0);
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

  //
  public BufferedImage getImage(){
    if(mediaTracker.statusID(0,false) == MediaTracker.COMPLETE){
      return image;
    }
    return null;
  }

  //
  public static void main(String[] strs){
    try{
      BufferedImage buffImg = (new ImageBuilder("D:/Download/SampleImage/lenna.png")).getImage();
      if(buffImg != null){
        ImageIO.write(buffImg,"jpg",new File("D:/Download/SampleImage/lenna.jpg"));
        //圧縮率は。。。
      }
    }
    catch(Exception exc){
      exc.printStackTrace();
    }
  }

}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。