动作监听器,用于在点击时更改图像。

时间:2017-03-03 01:49:45

标签: java

我有一些图像需要在点击时更改,现在每个类别只有三个图像,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();
    }
}  

2 个答案:

答案 0 :(得分:0)

您可以使用MouseListener。 怎么做:



//in your Class constructor
public XYZ()
{
.....
Timer t = new Timer(0,new Listener());
t.start();
addMouseListener(new Mouse());
// later in program
private class Mouse extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
<object>.doMethod(e.<otherMethod>);
}
}
&#13;
&#13;
&#13;

这就是如何使用通用的MouseListener。修改它以适合您的程序。

答案 1 :(得分:0)

好吧,让我们试一试。让我们定义一个实例字段,它保存我们系统中的所有图像项。这可能是,

private List<ImageIcon> imgIcons = new ArrayList<ImageIcon>;

然后编写一个方法将图像图标添加到此列表中。它可能看起来像这样。

private void addImageIcon(ImageIcon imgIcon){
    this.imgIcons.add(imgIcon);
}

从需要添加图像的任何位置调用此方法。然后,当您需要计算此面板中的图像数量时,您可以获得数组的大小。希望这可以帮助。快乐的编码!