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的值执行操作。然后,根据随机生成的值,运行特定的动画方法,可能通过开关/case或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;
}
}
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;
}
}