在网上找了好久都没有找到包含整个源代码的Swing动画,特别是淡入淡出效果,现在先上传个简单的动画供大家参考
package com.sbt.common.client.utils;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
* 演示如何使用Timer 这个类来完成Swing的动画效果。
* @author zcl
*/
public class TestWindow extends JPanel {
private final int panelWidth = 300, panelHeight = 200;
private final int DELAY = 10, IMAGE_SIZE = 35;
private Timer timer;
private JButton topButton;
private int x, y, moveX, moveY;
/**
* 面板构造函数,初始化面板。包括Timer 的场景。
*/
public TestWindow() {
timer = new Timer(DELAY, new ReboundListener());
this.setLayout(new FlowLayout(FlowLayout.LEFT));
topButton = new JButton("top");
// topButton.setPreferredSize(new Dimension(20, 20));
x = 0;
y = 40;
moveX = moveY = 3;
setBackground(Color.WHITE);
this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
JButton button = new JButton("click");
button.addMouseListener(getClickListener());
this.add(button);
}
private AsynMouseEventListener clickListener;
private AsynMouseEventListener getClickListener(){
if(clickListener == null){
clickListener = new AsynMouseEventListener() {
@Override
public boolean prepareAction(MouseEvent e){
if(e.getButton() == MouseEvent.BUTTON1){
timer.start();
}else{
timer.stop();
}
return false;
}
};
}
return clickListener;
}
/**
* 绘出图像在面板中的位置。
* @param page
*/
@Override
public void paintComponent(Graphics page) {
super.paintComponent(page);
topButton.paint(page);
}
//Swing 动画,不断的更新图像的位置,已达到动画的效果。
private class ReboundListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
x += moveX;
y += moveY;
topButton.setBounds(0, 0, 100, y);
if (x <= 0 || x >= panelWidth - IMAGE_SIZE) {
moveX = moveX * (-1);
}
if (y <= 0 || y >= panelHeight - IMAGE_SIZE) {
moveY = moveY * (-1);
// moveY =0;
}
repaint();
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("JUST SOSO");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestWindow());
frame.setSize(300, 300);
frame.setLocation(400, 400);
frame.setVisible(true);
}
}