私はクリックで変更する必要があるいくつかの画像を持っています、今は各カテゴリの3つの画像、3つの鼻、3つの目と3つの口があります。だから私は私の解決策にこのアプローチを取ったが、私はこれが最善の方法ではないことに気付く。なぜなら、画像の数は難しいコードになっているからだ。私はいくつかのアイデアや提案が必要です。アクションリスナー。クリック時に画像を変更します。
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
/**
* Create the panel.
*/
private int nose = 1;
private int mouth = 1;
private int eyes = 1;
Color[] color ={Color.BLUE, Color.RED, Color.PINK,Color.CYAN,Color.WHITE};
static int colorCounter =1 ;
public ImagePanel() {
}
public void changeNose(){
nose = ++nose % 3;
nose++;
}
public void changeMouth(){
mouth = ++mouth % 3;
mouth++;
}
public void changeEyes(){
eyes = ++ eyes % 3;
eyes++;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.green);
g.setColor(color[colorCounter]);
g.fillOval(40, 120, 400, 400);
ImageIcon hat = new ImageIcon
(ImagePanel.class.getResource("/a06Face/Images/santa.png"));
hat.paintIcon(this, g, 160, 3);
ImageIcon eyes1 = new ImageIcon
(ImagePanel.class.getResource("/a06Face/Images/eyes"+eyes+".png"));
eyes1.paintIcon(this, g,180, 200);
ImageIcon nose1 = new ImageIcon(ImagePanel.class.getResource("/a06Face/Images/nose"+nose+".png"));
nose1.paintIcon(this, g, 180, 300);
ImageIcon mouth1 = new ImageIcon
(ImagePanel.class.getResource("/a06Face/Images/mouth"+mouth+".png"));
mouth1.paintIcon(this, g, 170, 400);
repaint();
}
}
問題をもう少し説明してください。私はあなたがしようとしていることを明確ではないのですか? 3本の鼻、口などはどういう意味ですか? –
私は3つの異なるpngファイルnose1、nose2、nose3を持っています。そして私はクリックするたびにそれらを切り替えたいので、画像の数が過去3回にならないようにモジュラス演算子を使用していますので、範囲外にはなりません。しかし、あなたが私のchangeEyes、changeMouth、changeNoseを見ることができるように、3つの画像で動作するようにハードコーディングされています。私はこれを行うために別の方法を実装したいと思います、私は、私はフィールドの値とメソッドの値を変更する必要がある別の画像を追加する場合気づいた。 – mrKapplan