package trident.swing;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import org.pushingpixels.trident.Timeline;
import org.pushingpixels.trident.Timeline.RepeatBehavior;
public class ButtonFgLoop extends JFrame {
public ButtonFgLoop() {
this.setLayout(new FlowLayout());
JButton buttonWithCancel = createButton("button w/cancel");
final Timeline timelineWithCancel = createTimeline(buttonWithCancel);
buttonWithCancel.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
timelineWithCancel.playLoop(RepeatBehavior.REVERSE);
}
@Override
public void mouseExited(MouseEvent e) {
timelineWithCancel.cancelAtCycleBreak();
}
});
this.add(buttonWithCancel);
JButton buttonWithRevert = createButton("button w/revert");
final Timeline timelineWithRevert = createTimeline(buttonWithRevert);
buttonWithRevert.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
timelineWithRevert.playLoop(RepeatBehavior.REVERSE);
}
@Override
public void mouseExited(MouseEvent e) {
timelineWithRevert.playReverse();
}
});
this.add(buttonWithRevert);
this.setSize(400, 200);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JButton createButton(String label) {
JButton button = new JButton(label);
button.setForeground(Color.blue);
return button;
}
private Timeline createTimeline(JButton button) {
Timeline timeline = new Timeline(button);
timeline.setDuration(1500);
timeline.addPropertyToInterpolate("foreground", button.getForeground(),
Color.red);
return timeline;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ButtonFgLoop().setVisible(true);
}
});
}
}