Java 每次点击都会产生不同的效果?

Java 每次点击都会产生不同的效果?,java,Java,我有一个问题。首先,我有,我只会有一个按钮。 我的问题是:如何可以为每个按钮点击不同效果的动画。 所以,当我第一次点击按钮图像下降,第二次点击图像从左到右,第三次点击图像消失,然后重复第四次点击图像下降(我可以使动画从左到右,动画下降,然后图像消失。所以我知道如何做动画(效果),但我只是不知道如何为每次点击创建不同的图像效果)。 首先读一下关于Activolisteners的文章 然后简单地创建一个使用计数器的侦听器 每次单击按钮时,侦听器都会增加该计数器。并且根据计数器的当前值使用不同的动画

我有一个问题。首先,我有,我只会有一个按钮。 我的问题是:如何可以为每个按钮点击不同效果的动画。 所以,当我第一次点击按钮图像下降,第二次点击图像从左到右,第三次点击图像消失,然后重复第四次点击图像下降(我可以使动画从左到右,动画下降,然后图像消失。所以我知道如何做动画(效果),但我只是不知道如何为每次点击创建不同的图像效果)。

  • 首先读一下关于Activolisteners的文章
  • 然后简单地创建一个使用计数器的侦听器
每次单击按钮时,侦听器都会增加该计数器。并且根据计数器的当前值使用不同的动画。当“最后一个”动画发生时,只需将计数器重置为从头开始

给你

public class ButtonCycle extends JPanel {
    private int counter = 0;

    public ButtonCycle() {
        JButton btn = new JButton("Next");
        btn.addMouseListener(new MouseListener() {
            @Override
            public void mouseReleased(MouseEvent e) {}
            @Override
            public void mousePressed(MouseEvent e) {}
            @Override
            public void mouseClicked(MouseEvent e) {
                switch(counter) {
                    case 0:
                        // "Go down"-animation code here
                        System.out.println("Go down");

                        counter++;
                        break;
                    case 1:
                        // "Left->right"-animation code here
                        System.out.println("Left->right");

                        counter++;
                        break;
                    case 2:
                        // "Disappearing"-animation code here
                        System.out.println("*poof*, now I'm gone");

                        counter = 0;
                        break;
                }
            }
            @Override
            public void mouseExited(MouseEvent e) {}
            @Override
            public void mouseEntered(MouseEvent e) {}
        });

        add(btn);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new JFrame("Button cycling through animations");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setPreferredSize(new Dimension(250,250));
                f.setContentPane(new ButtonCycle());
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}

您可以使用java.util.Random类和Random.nextInt()方法,对按钮的ActionPerformed事件中的1到4的值执行操作。然后,根据随机生成的值,运行特定的动画方法,可能通过开关/caseif语句……等等。以下是一个例子:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Random rnd = new Random();
    int value = (rnd.nextInt(4) + 1);
    switch (value) {
        case 1:
            imageDown();
            break;
        case 2:
            imageLeftRight();
            break;
        case 3:
            imageGone();
            break;
        case 4:
            imageUp();
            break;
    }
}
或者,如果愿意,可以使用Math.random()方法,例如:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int value = 4 + (int)(Math.random() * (((1 - 2) - 4) + 1));
    switch (value) {
        case 1:
            imageDown();
            break;
        case 2:
            imageLeftRight();
        break;
        case 3:
            imageGone();
            break;
        case 4:
            imageUp();
            break;
    }
}
private int previousValue = 0;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int value = 0;
    Random rnd = new Random();
    do {
        value = (rnd.nextInt(4) + 1);
    } while (previousValue == value);
    previousValue = value;
    switch (value) {
        case 1:
            imageDown();
            break;
        case 2:
            imageLeftRight();
            break;
        case 3:
            imageGone();
            break;
        case 4:
            imageUp();
            break;
    }
}
当然,有时生成的随机数与之前生成的随机数非常相同,但您可以使用类字段保存之前的随机值,如果当前生成的值与之前生成的值相同,则可以在do/while循环,例如:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int value = 4 + (int)(Math.random() * (((1 - 2) - 4) + 1));
    switch (value) {
        case 1:
            imageDown();
            break;
        case 2:
            imageLeftRight();
        break;
        case 3:
            imageGone();
            break;
        case 4:
            imageUp();
            break;
    }
}
private int previousValue = 0;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int value = 0;
    Random rnd = new Random();
    do {
        value = (rnd.nextInt(4) + 1);
    } while (previousValue == value);
    previousValue = value;
    switch (value) {
        case 1:
            imageDown();
            break;
        case 2:
            imageLeftRight();
            break;
        case 3:
            imageGone();
            break;
        case 4:
            imageUp();
            break;
    }
}