2017-05-18 5 views
0

イメージをJPanelで表示するプログラムを作成していますが、新しいイメージを開くときに既存のイメージを置き換えるのに問題があります。 ImageIconから古いイメージを削除して新しいイメージに置き換える簡単な方法はありますか?私は何かのように思ったmp.remove(pic);はここで動作しますが、ImageIconではサポートされていません。JPanelの現在のイメージを別のイメージに置き換えます

class MapPanel extends JPanel { 

public MapPanel(String filename) { 
    if(mp == null) { 
    pic = new ImageIcon(filename); 
    int w = pic.getIconWidth(); 
    int h = pic.getIconHeight(); 
    setPreferredSize(new Dimension(w, h)); 
    setMinimumSize(new Dimension(w, h)); 
    setMaximumSize(new Dimension(w, h)); 
    setLayout(null); 
} 
    else { int confirm = 
JOptionPane.showConfirmDialog(MapProgram.this, "Unsaved changes, " + 
"do you really want to open a new map?", 
      "New map", JOptionPane.OK_CANCEL_OPTION); 
      if (confirm != JOptionPane.OK_OPTION) 
       return;  

    // Remove the current image and display the new one choosen 
    // from the JFileChooser. 


    }  
} 
protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(pic.getImage(), 0, 0, this); 
    } 

} 
+3

新しい画像を設定するにはどうすればよいですか? – XtremeBaumer

+0

どのように 'pic'を使っていますか?あなたが私達に示した唯一のことは、作成と割り当て 'pic = new ImageIcon(filename);と、画像の寸法を取得することだけです。 – Thomas

+0

申し訳ありませんが、何とかコードが失われました。更新されたコードを参照してください。 – Andpej

答えて

0

なぜImageIconを使用しているのですか?なぜImageIconを使用しているのかわからない、JPanelでイメージを描きたいと思うようです。 ImageIO.read()を使用して、ファイルセレクタによって選択されたファイルをBufferedImageとして読み込みます。イメージをメンバ変数に設定し、pic.getImage()の代わりにpaintComponent()でメンバ変数を使用します。ファイルが選択され、メンバー変数を新しいファイル呼び出しrepaint()に設定した後。または何もしない場合がありpreferredSizeが、分サイズ、および最大サイズを設定することも

https://docs.oracle.com/javase/8/docs/api/javax/imageio/ImageIO.html#read-java.io.File-

、。 JPanelを使用しているコンテナをどのレイアウトマネージャで使用しているかによって異なります。

-1

あなたのやりたいことがうまくいくかどうかはわかりませんが、試してみてください。

g.drawImage(new ImageIcon(filename).getImage(), 0, 0, this); 

か、単にそこに画像を渡します。

関連する問題