Я пытаюсь переместить эти два объекта JLabel (label_2
и label_3
) в соответствии с движением мыши (когда мышь входила и выходила). Подробно, моя цель - навести курсор мыши на label_1
, тогда label_2
и label_3
должны переместиться в определенные координаты. Когда мышь выйдет, эти две метки (label_2
и label_3
) должны подождать некоторое короткое время, а затем выполнить обратную анимацию, что они сделали в первой анимации.Java Swing - Перемещение JLabels с использованием Swing Timer class
Однако проблема, с которой я столкнулся, заключается в том, что всякий раз, когда мышь выходила, вместо ожидания, объекты label_2
и label_3
колеблются между их исходным положением и конечной позицией. Как исправить эту проблему?
Вот часть моего кода (извиняюсь фактический код довольно длинный):
label_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
Point inputDest = new Point(76, 111);
Point toolDest = new Point(172, 24);
timer = new Timer(10, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
Point pointKeyboard = label_2.getLocation();
Point pointTool = label_3.getLocation();
if(pointTool.x != 172)
pointTool.x -= 7;
if(pointTool.y != 24)
pointTool.y -= 12;
if(pointKeyboard.x != 76)
pointKeyboard.x -= 14;
if(pointKeyboard.y != 111)
pointKeyboard.y -= 3;
label_2.setLocation(pointKeyboard);
label_3.setLocation(pointTool);
repaint();
}
});
timer.start();
if(label_2.getLocation() == inputDest && label_3.getLocation() == toolDest)
timer.stop();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
@Override
public void mouseExited(MouseEvent e) {
Point inputDest = new Point(174, 132);
Point toolDest = new Point(221, 108);
timer = new Timer(10, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
Point pointKeyboard = label_2.getLocation();
Point pointTool = label_3.getLocation();
if(pointTool.x != 221)
pointTool.x += 7;
if(pointTool.y != 108)
pointTool.y += 12;
if(pointKeyboard.x != 174)
pointKeyboard.x += 14;
if(pointKeyboard.y != 132)
pointKeyboard.y += 3;
label_2.setLocation(pointKeyboard);
label_3.setLocation(pointTool);
repaint();
}
});
timer.start();
if(label_2.getLocation() == inputDest && label_3.getLocation() == toolDest)
timer.stop();
}
});
Спасибо.