我正在尝试用JLabels和定时器来做一些滑动效果。我只想使用两个计时器(IN和OUT)来管理多个组件的效果。问题是,只有当我不能快速地从一个JLabel移动到另一个,并且我不知道如何管理它时,一切才能正常工作。
下面是我的代码:
public class Sliders extends JFrame {
private JPanel contentPane;
JLabel label,label_1;
static RainDrop frame;
javax.swing.Timer in,out;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new RainDrop();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Sliders() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
label = new JLabel("");
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent a1) {
setIN(2,0,label);
System.out.println("ENTRATO");
checkloop_out_mag(-270,label);
}
@Override
public void mouseExited(MouseEvent a2) {
in.stop();
setOUT(-2,0,label);
System.out.println("USCITO");
}
});
label.setBackground(Color.ORANGE);
label.setOpaque(true);
label.setBounds(-270, 0, 337, 44);
contentPane.add(label);
label_1 = new JLabel("");
label_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent b1) {
setIN(2,44,label_1);
System.out.println("ENTRATO");
checkloop_out_mag(-270,label_1);
}
@Override
public void mouseExited(MouseEvent b2) {
in.stop();
setOUT(-2,44,label_1);
System.out.println("USCITO");
}
});
label_1.setOpaque(true);
label_1.setBackground(Color.GREEN);
label_1.setBounds(-270, 44, 337, 44);
contentPane.add(label_1);
}
public void setIN(int x,int y,JLabel label) {
in = new javax.swing.Timer(2, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getBounds().x+x,y);
System.out.println("SPOSTO");
System.out.println("CONTROLLO");
checkloop_in_magequals(0,label);
}
});
in.setRepeats(true);
in.start();
}
public void setOUT(int x,int y,JLabel label) {
out = new javax.swing.Timer(2, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getBounds().x+x,y);
System.out.println("SPOSTO");
System.out.println("CONTROLLO");
checkloop_out_equals(-270,label);
}
});
out.setRepeats(true);
out.start();
}
public void checkloop_out_equals(int z,JLabel label) {
if (label.getBounds().x==z){
out.stop();
System.out.println("STOP");
}
}
public void checkloop_out_mag(int z,JLabel label) {
if (label.getBounds().x>z){
out.stop();
System.out.println("STOP");
}
}
public void checkloop_in_magequals(int z,JLabel label) {
if (label.getBounds().x>=z){
in.stop();
System.out.println("STOP");
}
}
}
有没有办法只用两个计时器就能修复代码?或者我需要为每个JComponent使用两个计时器?
https://stackoverflow.com/questions/50651974
复制相似问题