の行列n * nをJPanel
に持っています。現在、私はそれぞれのJButton
にImageIcon
を設定しています。これは、単純なイメージアイコンではありません、それは私がこの機能と重複する2つの画像です:ImageIconをJavaで保存するには
public ImageIcon DoubleImage(BufferedImage eau, BufferedImage img){
// Create a new image.
finalIcon = new BufferedImage(
eau.getWidth(), eau.getHeight(),
BufferedImage.TYPE_INT_ARGB); // start transparent
// Get the graphics object. This is like the canvas you draw on.
Graphics g = finalIcon.getGraphics();
// Now we draw the images.
g.drawImage((Image) eau, 0, 0, null); // start at (0, 0)
img = resize((BufferedImage) img, eau.getWidth(), eau.getHeight());
g.drawImage((Image) img, eau.getWidth()/2-img.getHeight()/2, eau.getHeight()/2-img.getWidth()/2, null); // start at (10, 10)
// Once we're done drawing on the Graphics object, we should
// call dispose() on it to free up memory.
g.dispose();
// Finally, convert to ImageIcon and apply.
ImageIcon icon = new ImageIcon(finalIcon);
return icon;
}
私の問題は、今の時間の各繰り返しで、私は私のJButtons
で私のアイコンを変更しなければならないということです。 10種類以上の最終画像がないうちにアイコンを再描画する必要があることを意味します。しかし、それはあまりにも多くの時間がかかります(アプリケーションが10 * 10の小さなマトリックスで遅れます; 1秒ごとに反復が発生するので、これを修正する必要があります)。私は最初にすべてのイメージを作成し、どこかに保存するという考えがありましたが、これを実行する方法はわかりません。おそらく列挙型ですか?私のクラスのコンストラクタにちょうど入っていますか?
私の主なクラスがJButton
に拡張されていることを正確に説明する必要があります。最後の行列にn * nをインスタンス化します。
EDIT:関数のコードresize
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = dimg.createGraphics();
g2d.drawImage(tmp, 0, 0, null);
g2d.dispose();
return dimg;
}
EDIT2:各反復
public void iteration(){
final Vue vue = marreGraphique.lireVue();
final Presenter presenter = vue.lirePresenter();
try{ //here I'm just instantiating my BufferedImage
eau = ImageIO.read(new File("Icones/mosaique.jpg"));
if(grenouille){
img = ImageIO.read(new File(presenter.getGrenouilleImg()));
}
else{
img = ImageIO.read(new File(presenter.getImg(ligne, colonne)));
}
}
catch (IOException e){}
icon = DoubleImage(eau,img);
setIcon(icon);
setHorizontalAlignment(SwingConstants.CENTER);
setVerticalAlignment(SwingConstants.CENTER);
}
イメージのサイズを変更しようとしていますか? ( 'resize()'を参照してください) – ItamarG3
はい、私は 'resize'のコードで私の投稿を編集しました – pioupiou1211
ええ、何が起こっているのか把握しようとしています... – ItamarG3