📄 loginpanel.java
字号:
package com.zlf.qqclient.login;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import com.zlf.qq.pub.DataPacket;
import com.zlf.qqclient.mainframe.MainFrame;
import com.zlf.qqclient.utils.Public;
import com.zlf.qqclient.utils.QQUtils;
/**
* 登录窗
*
* @author zlf
*
*/
public class LoginPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 5924038127713163146L;
private JLabel topLabel;
private JLabel qqNo;
private JLabel qqPwd;
private JComboBox ComNo;
private JPasswordField pwd;
private JCheckBox rememberNo;
private JCheckBox rememberPwd;
private JButton btnSet;
private JButton btnLogin;
private JLabel serverAddrLabel;
private JLabel portNumLabel;
private JComboBox serverAddrCombo;
private JTextField portNumText;
private JPanel topPanel;// 上部
private JPanel centerPanel;// 中部
private JPanel bottomPanel;// 下部
private int flag = 0;// 0隐藏着1拉长的
private MainFrame chatFrame;
private String IPAdress = null;
public LoginPanel(){
}
/**
*
* LoginPanel构造
* @param f
*
*/
LoginPanel(final JFrame f) {
this.setLayout(new BorderLayout());
Box box = Box.createVerticalBox();
// 上部panel放一个图片,存放用户id对应的头像和名字
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
topLabel = new JLabel(QQUtils.getTotalIcon("qqbanner.jpg"));
topPanel.add(topLabel, BorderLayout.CENTER);
// 中部
qqNo = new JLabel("QQ号码");
qqPwd = new JLabel("QQ密码");
// QQ号码编辑框
String[] QQ_id = new String[] {
QQUtils.properties.getProperty("QQ_id")
};
ComNo = new JComboBox(QQ_id);
ComNo.setBackground(Color.white);
ComNo.setEditable(true);
// 密码编辑框
pwd = new JPasswordField(QQUtils.properties.getProperty("QQ_Pwd"));
pwd.setEchoChar('*');
// 记住号码和密码
rememberNo = new JCheckBox("记录号码");
rememberNo.setSelected(true);
rememberNo.setOpaque(false);
rememberPwd = new JCheckBox("记录密码");
rememberPwd.setOpaque(false);
// 设置服务器IP和端口号
btnSet = new JButton((ImageIcon) QQUtils.getTotalIcon("set.gif"));
btnSet.setText("设 置");
btnSet.setHorizontalTextPosition(JButton.CENTER);
btnSet.setVerticalTextPosition(JButton.CENTER);
btnSet.setBorder(BorderFactory.createEmptyBorder());
btnSet.addActionListener(new AbstractAction() {
/**
* 增加设置按钮监听,弹出和隐藏配置框
*/
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
if (flag == 0) {
bottomPanel.setVisible(true);
f.setSize(330, 350);
flag = 1;// 拉长了
} else if (flag == 1) {
bottomPanel.setVisible(false);
f.setSize(330, 250);
flag = 0;
}
}
});
// 登录按钮
btnLogin = new JButton((ImageIcon) QQUtils.getTotalIcon("login.gif"));
btnLogin.setText("登 录");
btnLogin.setHorizontalTextPosition(JButton.CENTER);
btnLogin.setVerticalTextPosition(JButton.CENTER);
//btnLogin.setMargin(new Insets());
btnLogin.setBorder(BorderFactory.createEmptyBorder());
btnLogin.addActionListener(new AbstractAction() {
/**
* 登录按钮监听事件
*/
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
// 登录时做的事,验证输入,连接服务器,发送登录包
if (ComNo.getSelectedItem().equals("")) {
JOptionPane.showMessageDialog(f, "用户编号不能为空",
"提示框", JOptionPane.WARNING_MESSAGE);
return;
}
if (new String(pwd.getPassword()).equals("")){
JOptionPane.showMessageDialog(f, "密码不能为空",
"提示框", JOptionPane.WARNING_MESSAGE);
return;
}
int port = 0;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
DataPacket loginPacket = null;
Socket s = null;
if ((!serverAddrCombo.getSelectedItem().equals(""))
&& (!portNumText.getText().equals(""))) {
IPAdress = (String) serverAddrCombo.getSelectedItem();
port = Integer.parseInt(portNumText.getText());
try {
s = new Socket(IPAdress, port);
//连接成功,保存服务器IP和端口号的配置
QQUtils.properties.setProperty("Address", (String)serverAddrCombo.getSelectedItem());
QQUtils.properties.setProperty("port", portNumText.getText());
QQUtils.saveProperties();
// 给服务器发送消息,登录包
oos = new ObjectOutputStream(new BufferedOutputStream(s
.getOutputStream()));
if ((!((String) ComNo.getSelectedItem()).equals(""))
&& (!(pwd.getPassword()).equals(""))) {
String userNo = (String) ComNo.getSelectedItem();
String userPwd = String.valueOf(pwd.getPassword());
HashMap data = new HashMap();
data.put("userNo", userNo);
data.put("userPwd", userPwd);
loginPacket = new DataPacket(DataPacket.Login_type,
userNo, DataPacket.Server_Id, data);
oos.writeObject(loginPacket);
oos.flush();
// 接收验证包
ois = new ObjectInputStream(
new BufferedInputStream(s.getInputStream()));
DataPacket serverPacket = (DataPacket) ois
.readObject();
if (serverPacket.getType().equals(
DataPacket.ValiDate_type)) {
if ((serverPacket.getData().get("tag")
.equals("0"))
|| (serverPacket.getData().get("tag")
.equals("1"))
|| (serverPacket.getData().get("tag")
.equals("2"))) {
String wrong = (String) serverPacket
.getData().get("data");
JOptionPane.showMessageDialog(f, wrong,
"提示框", JOptionPane.WARNING_MESSAGE);
} else {
if (rememberNo.isSelected() == true) {
Public.finalUserNo=(String) ComNo
.getSelectedItem();
// 将号码保存到配置文件中
QQUtils.properties.setProperty("QQ_id",
(String) ComNo.getSelectedItem());
QQUtils.saveProperties((String) ComNo.getSelectedItem());
}
if (rememberPwd.isSelected() == true) {
Public.finalUserPwd=String.valueOf(pwd
.getPassword());
// 保存密码
QQUtils.properties.setProperty(
"QQ_Pwd", String.valueOf(pwd
.getPassword()));
QQUtils.saveProperties((String) ComNo.getSelectedItem());
}
// 通过了验证,解包,把用户信息,部门信息存放在公共变量里
ArrayList arryList = (ArrayList) serverPacket
.getData().get("data");
Public.userVector = (Vector) arryList
.get(0);
Public.deptVector = (Vector) arryList
.get(1);
// 释放登录窗体
f.dispose();
chatFrame = new MainFrame(userNo);
// 创建一个线程,用于接受信息
RecieveThread recieveThread = new RecieveThread(
ois, chatFrame);
Thread myRecieveThread = new Thread(recieveThread);
myRecieveThread.start();// 启动线程
// 保存信息,将线程,socket,dos,dis保存到全局变量
ArrayList a = new ArrayList();
a.add(myRecieveThread);
a.add(s);
a.add(oos);
a.add(ois);
Public.mySocketInfo.put(userNo, a);
QQUtils.setProperties(userNo);
}
}
}
} catch (UnknownHostException e1) {
e1.printStackTrace();
return;
} catch (IOException e1) {
JOptionPane.showMessageDialog(f, "服务器连接失败!", "提示框",
JOptionPane.WARNING_MESSAGE);
return;
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
}
});
// 界面布局
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
Box panelBox1 = Box.createHorizontalBox();
panelBox1.add(Box.createHorizontalStrut(40));
panelBox1.add(qqNo);
panelBox1.add(Box.createHorizontalStrut(10));
panelBox1.add(ComNo);
panelBox1.add(Box.createHorizontalStrut(40));
panel1.add(panelBox1);
panel1.setBackground(new Color(235, 250, 255));
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
Box panelBox2 = Box.createHorizontalBox();
panelBox2.add(Box.createHorizontalStrut(40));
panelBox2.add(qqPwd);
panelBox2.add(Box.createHorizontalStrut(10));
panelBox2.add(pwd);
panelBox2.add(Box.createHorizontalStrut(40));
panel2.add(panelBox2);
panel2.setBackground(new Color(235, 250, 255));
JPanel panel3 = new JPanel();
panel3.add(rememberNo);
panel3.add(Box.createHorizontalStrut(10));
panel3.add(rememberPwd);
panel3.setBackground(new Color(235, 250, 255));
JPanel panel4 = new JPanel();
panel4.add(btnSet);
panel4.add(Box.createHorizontalStrut(10));
panel4.add(btnLogin);
panel4.setBackground(new Color(200, 240, 255));
JPanel centerTopPanel = new JPanel();
centerTopPanel
.setLayout(new BoxLayout(centerTopPanel, BoxLayout.Y_AXIS));
centerTopPanel.setBorder(BorderFactory.createLineBorder(new Color(100,
180, 255)));
centerTopPanel.add(Box.createVerticalStrut(10));
centerTopPanel.add(panel1);
centerTopPanel.add(Box.createVerticalStrut(15));
centerTopPanel.add(panel2);
centerTopPanel.add(Box.createVerticalStrut(15));
centerTopPanel.add(panel3);
centerTopPanel.setBackground(new Color(235, 250, 255));
centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
Box centerPanelBox = Box.createVerticalBox();
centerPanelBox.add(centerTopPanel);
centerPanelBox.add(Box.createVerticalStrut(10));
centerPanelBox.add(panel4);
centerPanel.add(centerPanelBox);
// 设置背景色
Color bg = new Color(200, 240, 255);
centerPanel.setBackground(bg);
// 下部的布局
serverAddrLabel = new JLabel("服务器地址:");
portNumLabel = new JLabel("端 口 号:");
// 服务器IP地址的输入下拉框
serverAddrCombo = new JComboBox();
serverAddrCombo.setBackground(Color.white);
serverAddrCombo.setEditable(true);
serverAddrCombo.addItem(QQUtils.properties.getProperty("Address"));
String[] localIP = getAllLocalHostIP();
for(int i=0 ; i<localIP.length ; i++){
//System.out.println( localIP[i]);
serverAddrCombo.addItem(localIP[i]);
}
// 端口号的输入框
portNumText = new JTextField();
portNumText.setText(QQUtils.properties.getProperty("port"));
Box box1 = Box.createHorizontalBox();
box1.add(Box.createHorizontalStrut(35));
box1.add(serverAddrLabel);
box1.add(Box.createHorizontalStrut(10));
box1.add(serverAddrCombo);
box1.add(Box.createHorizontalStrut(35));
Box box2 = Box.createHorizontalBox();
box2.add(Box.createHorizontalStrut(35));
box2.add(portNumLabel);
box2.add(Box.createHorizontalStrut(10));
box2.add(portNumText);
box2.add(Box.createHorizontalStrut(35));
Box outBox = Box.createVerticalBox();
outBox.add(Box.createVerticalStrut(10));
outBox.add(box1);
outBox.add(Box.createVerticalStrut(10));
outBox.add(box2);
outBox.add(Box.createVerticalStrut(10));
bottomPanel = new JPanel();
bottomPanel.setLayout(new BorderLayout());
bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
JPanel bottomInnerPanel = new JPanel();
bottomInnerPanel.setLayout(new BorderLayout());
bottomInnerPanel.setBorder(new TitledBorder("网络设置"));
bottomInnerPanel.add(outBox);
bottomInnerPanel.setBackground(new Color(200, 240, 255));
bottomPanel.add(bottomInnerPanel);
bottomPanel.setBackground(new Color(200, 240, 255));
box.add(centerPanel);
this.add(topPanel, BorderLayout.NORTH);
this.add(box, BorderLayout.CENTER);
this.add(bottomPanel, BorderLayout.SOUTH);
// 隐藏设置框
bottomPanel.setVisible(false);
}
public JPanel getBottomPanel() {
return bottomPanel;
}
public void setBottomPanel(JPanel bottomPanel) {
this.bottomPanel = bottomPanel;
}
/**
* getLocalHostName()
* @return 主机名
*/
public static String getLocalHostName(){
String hostName;
try{
InetAddress addr = InetAddress.getLocalHost();
hostName = addr.getHostName();
}
catch(Exception ex){
hostName = "localhost";
}
return hostName;
}
/**
* getAllLocalHostIP()
* @return 一组本机IP地址
*/
public static String[] getAllLocalHostIP(){
String[] ret = null;
try{
String hostName = getLocalHostName();
if(hostName.length()>0){
InetAddress[] addrs = InetAddress.getAllByName(hostName);
if(addrs.length>0){
ret = new String[addrs.length];
for(int i=0 ; i< addrs.length ; i++){
ret[i] = addrs[i].getHostAddress();
}
}
}
}
catch(Exception ex){
ret = null;
}
return ret;
}
public String getIPAdress() {
return IPAdress;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -