对于每次点击不同的效果?

时间:2017-07-08 12:21:59

标签: java

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

3 个答案:

答案 0 :(得分:0)

  • 首先阅读有关ActioListeners的内容
  • 然后简单地创建一个使用计数器的监听器!

每次单击按钮时,监听器都会增加该计数器。并且您根据计数器的当前值使用不同的动画。当“最后”动画发生时 - 只需将计数器重置为从头开始。

答案 1 :(得分:0)

你去吧

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);
            }
        });
    }
}

答案 2 :(得分:0)

您可以将 java.util.Random 类与 Random.nextInt()方法一起用于 ActionPerformed中的1到4的值强>你的按钮事件。然后,根据随机生成的值运行特定的动画方法,可能通过开关/大小写 if 语句......等等。这是一个例子:

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;
    }
}

当然有时候生成的随机数与之前生成的数字非常相似,但是你可以再次使用类字段来保存先前的随机数,如果当前生成的值是相同的话作为先前生成的值,您可以在 do / while 循环中生成另一个值,例如:

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;
    }
}