/**
* 登陆过程中的动画界面
*/
package cn.qq.view.login;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.sun.awt.AWTUtilities;
import cn.qq.listener.FrameMoveListener;
import cn.qq.listener.WindowCloseListener;
import cn.qq.listener.WindowMinListener;
import cn.qq.manager.ServiceInterface;
import cn.qq.service.LoginRequest;
import cn.qq.thread.LoginTrayIconThread;
import cn.qq.view.util.JButtonUtil;
/**
*
* @author _zc
*
*/
public class LoadingFrame extends JFrame implements Runnable {
private JPanel mainPane = null; // 主面板
private JPanel downPane = null; // 底部取消按钮面板
private JLabel lblCancel = null; // 取消文字标签
private JButton btnCancelLogin = null;// 取消登陆按钮
private JButton btnMin = null; // 最小化
private JButton btnClose = null;// 关闭
private JButton btnSet = null;// 设置
private JLabel lblAccountInfo = null;// 提示账号
public SystemTray sysTray = null; // 系统托盘
public TrayIcon trayIcon = null; // 托盘图标
public LoginFrame loginFrame = null; // 登录界面
boolean isRun = true; // 控制线程
public LoadingFrame(LoginFrame loginFrame) {
this.loginFrame = loginFrame;
}
public void launchFrame() {
this.setSize(380, 292);
this.setIconImage(new ImageIcon("image/Login/qqTitle.png").getImage());
this.setUndecorated(true);
AWTUtilities.setWindowOpacity(this, 0.98f);
this.initComponent();
this.addComponent();
this.initSystemTray();
this.setContentPane(mainPane);
/** 设置圆角 */
AWTUtilities.setWindowShape(this, new RoundRectangle2D.Double(
0.0D, 0.0D, this.getWidth(), this.getHeight(), 20.0D, 20.0D));
// 添加窗口移动监听
FrameMoveListener listener = new FrameMoveListener(this);
this.addMouseListener(listener);
this.addMouseMotionListener(listener);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
Thread.sleep(4000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
//多账号登录登录请求
if(AddLoginAccountFrame.account!=null && !AddLoginAccountFrame.account.equals("")){
LoginRequest service = null;
try {
service = new LoginRequest(AddLoginAccountFrame.account, AddLoginAccountFrame.password, this);
} catch (IOException e) {
this.showTip();
// e.printStackTrace();
}
service.sendServiceRequest();
service.updateInfo();
}
//向服务器发送登陆请求
ServiceInterface request = null;
try {
request = new LoginRequest(this);
} catch (IOException e) {
this.showTip();
// e.printStackTrace();
}
if(request != null){
request.sendServiceRequest();
request.updateInfo();
}
}
/**
* 显示提示消息
*/
public void showTip() {
this.setVisible(false);
this.dispose();
this.sysTray.remove(this.trayIcon);
this.loginFrame.setVisible(true);
try {
this.loginFrame.sysTray.add(loginFrame.trayIcon);
} catch (AWTException e1) {
// TODO Auto-generated catch block
// e1.printStackTrace();
}
this.loginFrame.setLocation(this.getX(),this.getY());
this.loginFrame.mainPane.remove(this.loginFrame.downPane);
this.loginFrame.mainPane.add(this.loginFrame.errorTipPane);
this.loginFrame.errorTipPane.setBounds(0, 241, 380, 51);
this.loginFrame.errorTipPane.lblTip.setText("网络连接故障,服务器正在维护。");
this.loginFrame.errorTipPane.lblTip.setBounds(100, 15, 300, 20);
this.loginFrame.mainPane.updateUI();
}
/**
* 设置系统托盘
*/
private void initSystemTray() {
sysTray = SystemTray.getSystemTray();
trayIcon = new TrayIcon(new ImageIcon("image/Loading/login_tray/6.png").getImage(),"QQ登录");
LoginTrayIconThread trayIconThread = new LoginTrayIconThread(trayIcon);
new Thread(trayIconThread).start();
try {
if (SystemTray.isSupported() && trayIcon != null) {
sysTray.add(trayIcon);
}
} catch (AWTException e1) {
e1.printStackTrace();
}
}
/**
* 初始化组件
*/
private void initComponent() {
// 主面板
mainPane = new MainPane();
// mainPane.setBorder(new LineBorder(Color.GRAY));
downPane = new DownPane();
lblAccountInfo = new JLabel(loginFrame.getJtfAccount().getText() + "正在登录...");
lblAccountInfo.setFont(new Font("微软雅黑", Font.PLAIN, 12));
lblAccountInfo.setForeground(Color.black);
btnClose = JButtonUtil.getBtnClose();
btnMin = JButtonUtil.getBtnMin();
btnSet = JButtonUtil.getBtnSet();
btnSet.setEnabled(false);
// 给取消按钮添加活动事件
btnCancelLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
isRun = false;
dispose();
sysTray.remove(trayIcon);
loginFrame.setVisible(true);
try {
loginFrame.sysTray.add(loginFrame.trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
loginFrame.setLocation(LoadingFrame.this.getX(),
LoadingFrame.this.getY());
}
});
// 给最小化按钮添加活动事件
btnMin.addActionListener(new WindowMinListener(this));
//给关闭按钮添加监听
btnClose.setActionCommand("exit");
btnClose.addActionListener(new WindowCloseListener(this));
}
/**
* 添加组件
*/
private void addComponent() {
mainPane.setLayout(null);
mainPane.add(btnClose);
btnClose.setBounds(342, -2, 39, 20);
mainPane.add(btnMin);
btnMin.setBounds(315, -2, 28, 20);
mainPane.add(btnSet);
btnSet.setBounds(288, -2, 28, 20);
mainPane.add(lblAccountInfo);
lblAccountInfo.setBounds(140, 115, 180, 60);
mainPane.add(downPane);
downPane.setBounds(0, 241, 380, 51);
}
/**
* 底部按钮面板
*/
class DownPane extends JPanel {
public DownPane() {
btnCancelLogin = JButtonUtil.getIconButton(
"image/Login/button_red_normal.png",
"image/Login/button_red_press.png",
"image/Login/button_red_hover.png");
lblCancel = new JLabel("取 消");
lblCancel.setFont(new Font("微软雅黑", Font.PLAIN, 12));
lblCancel.setForeground(Color.BLACK);
this.setLayout(null);
this.add(lblCancel);
lblCancel.setBounds(163, 16, 100, 25);
this.add(btnCancelLogin);
btnCancelLogin.setBounds(72, 5, 237, 48);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(new ImageIcon("image/Login/loginbutton_background.jpg")
.getImage(), 0, 0, 378, 50, this);
g.drawImage(new ImageIcon("image/Loading/loading.gif").getImage(),
0, 1, 380, 2, this);
}
}
/**
* 主面板
*
* @author _zc
*/
class MainPane extends JPanel implements Runnable {
int time = 1;
public MainPane() {
new Thread(this).start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(new ImageIcon("image/Login/background/afternoon.jpg")
.getImage(), 0, 0, 380, 292, this);
// if (time <= 10) {
// g.drawImage(
// new ImageIcon("image/Loading/white/1.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 20) {
// g.drawImage(
// new ImageIcon("image/Loading/white/2.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 30) {
// g.drawImage(
// new ImageIcon("image/Loading/white/3.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 40) {
// g.drawImage(
// new ImageIcon("image/Loading/white/4.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 50) {
// g.drawImage(
// new ImageIcon("image/Loading/white/5.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 60) {
// g.drawImage(
// new ImageIcon("image/Loading/white/6.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 70) {
// g.drawImage(
// new ImageIcon("image/Loading/white/7.png").getImage(),
// 168, 165, 28, 28, this);
// } else if (time <= 80) {
// g.drawImage(
// new ImageIcon("image/Loading/white/8.png").getImage(),
// 168, 165, 28, 28, this);
// }
// time++;
// if (time >= 80) {
// time = 1;
// }
if (time <= 10) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000001.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 20) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000002.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 30) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000003.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 40) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000004.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 50) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000005.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 60) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000006.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 70) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000007.png").getImage(),
60, 80, 286, 50, this);
} else if (time <= 80) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000008.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 90) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000009.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 100) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000010.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 110) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000011.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 120) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000010.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 130) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000009.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 140) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000008.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 150) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000007.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 160) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000006.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 170) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000005.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 180) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000004.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 190) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000003.png").getImage(),
60, 80, 286, 50, this);
}else if (time <= 210) {
g.drawImage(
new ImageIcon("image/Loading/snow_loading/frame-000002.png").getImage(),
60, 80, 286, 50, this);
}
time++;
if (time >= 210) {
time = 1;
}
}
@Override
public void run() {
while (true) {
this.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Override
public void run() {
this.launchFrame();
}
}