如何缓慢(像效果一样)将标签(图像)移动到 JAVA 中单击鼠标的位置并摆动
How to slowly(like a effect) move a label(image) to click position of mouse in JAVA with swing
我想制作一个 GUI 程序,当我按下鼠标按钮时,将标签移动到按下的 X 和 Y 位置。我做到了,这很容易,但我现在想让它像一个缓慢移动的效果。我试着用 thread.sleep()
来做,但没有成功。你能帮我提供想法或代码吗?这是我的代码:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class jGame extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
jGame frame = new jGame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public jGame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 568, 459);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
JLabel robot = new JLabel("");
robot.setIcon(new ImageIcon("/home/ubuntu/Desktop/robot.png"));
panel.add(robot);
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
robot.setLocation(e.getX() - 25, e.getY() - 40);
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
});
}
}
这是我使用的图像:
写作是乐趣的一半...
- 将
startPoint
& nextStep
存储为 Points
- 初始化一个javax.swing.Timer
- 当用户点击时,保存 Root
startPoint
,将 nextStep
设置为鼠标位置并调用 timer.start()
。
Timer.actionPerformed()
需要在返回 startPoint
时计算 nextStep
点。
- 如果 startPoint 等于 nextStep 调用
timer.stop()
我想制作一个 GUI 程序,当我按下鼠标按钮时,将标签移动到按下的 X 和 Y 位置。我做到了,这很容易,但我现在想让它像一个缓慢移动的效果。我试着用 thread.sleep()
来做,但没有成功。你能帮我提供想法或代码吗?这是我的代码:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class jGame extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
jGame frame = new jGame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public jGame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 568, 459);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
JLabel robot = new JLabel("");
robot.setIcon(new ImageIcon("/home/ubuntu/Desktop/robot.png"));
panel.add(robot);
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
robot.setLocation(e.getX() - 25, e.getY() - 40);
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
});
}
}
这是我使用的图像:
写作是乐趣的一半...
- 将
startPoint
&nextStep
存储为Points
- 初始化一个javax.swing.Timer
- 当用户点击时,保存 Root
startPoint
,将nextStep
设置为鼠标位置并调用timer.start()
。 Timer.actionPerformed()
需要在返回startPoint
时计算nextStep
点。- 如果 startPoint 等于 nextStep 调用
timer.stop()