📄 mainpane.java
字号:
/**
* @(#)client.frm.MainPane.java 2008-8-30
* Copy Right Information : Tarena
* Project : JavaQQ
* JDK version used : jdk1.6.4
* Comments : 主程序类、JQ的主框架类。
* Version : 1.0
* Sr Date Modified By Why & What is modified
* 1. 2008-8-30 小猪 新建
**/
package client.frm;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import data.FriendUser;
import data.JQMessage;
import data.LoginUser;
import data.Portrait;
import data.Record;
import data.UserState;
/**
* 主程序类、JQ的主框架类。<br>
* 2008-8-30
* @author 达内科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建议)
*/
public class MainPane extends JFrame implements ActionListener{
private JLabel lblPhoto = new JLabel();
private JComboBox boxState = new JComboBox();
private JLabel lblNickName = new JLabel();
private JTextArea txtSignature = new JTextArea();
private JList listFriend ;//= new JList();
private DefaultListModel listModel = null;
private JButton btnMenu = new JButton("菜单");
private JButton btnFind = new JButton("查找");
private JButton btnSys = new JButton("系统消息");
private JLabel lblLoginBar = new JLabel();
private JButton btnCancleLogin = new JButton("取消登录");
private JPanel fillWidth = new FillWidth(118,120,Color.WHITE);
private Socket client = null;
private ObjectOutputStream oos = null;
private ObjectInputStream ois = null;
private HashMap<Integer, ChatPane> chat = null;
private FriendUser selfUser = null;
private String serverIp;
private Integer serverPort;
private Integer jqnum;
private String password;
private Integer state;
private JPopupMenu popupMenu = null;
private JMenuItem itemChat = null;
private JMenuItem itemDelete = null;
private JMenuItem itemFriendInfo = null;
private JMenuItem itemLog = null;
private FindWindow findWindow = null;
private JPopupMenu menu = new JPopupMenu();
private JMenuItem itemQuit = new JMenuItem("退出");
private Broadcastwindow broadcastwindow = null;
private Thread thread = null;
/**
* 登陆后显示的主面板的构造函数。
* @param serverIp 服务器ip。
* @param serverPort 服务器端口。
* @param jqnum 登陆的jq号码。
* @param password 登陆的jq密码。
* @param state 登陆的状态。
*/
public MainPane(String serverIp,Integer serverPort,Integer jqnum,String password,Integer state) {
this.serverIp = serverIp;
this.serverPort = serverPort;
this.jqnum = jqnum;
this.password = password;
this.state = state;
//System.out.println(jqnum+":"+password+"State:"+state);
setTitle("JQ2008");
setSize(200,550);
setResizable(false);
Toolkit tk=Toolkit.getDefaultToolkit();
setLocation((tk.getScreenSize().width-getSize().width)-10,(tk.getScreenSize().height-getSize().height)/2-30);
//init();
getContentPane().setBackground(Color.WHITE);
initLoginPane();
//setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
thread = new LoginThread();
thread.start();
}
/**
* 初始化用户按下登陆按钮后,主面板显示登陆进度条窗体。
*/
private void initLoginPane(){
btnCancleLogin.setPreferredSize(new Dimension(60,20));
btnCancleLogin.setMargin(new Insets(0,0,0,0));
btnCancleLogin.setFocusPainted(false);
lblLoginBar.setIcon(new ImageIcon(MainPane.class.getResource("/client/images/loginbar.gif")));
setLayout(new FlowLayout(FlowLayout.CENTER,20,10));
add(fillWidth);
add(lblLoginBar);
//add(new FillWidth(1,2,Color.WHITE));
add(btnCancleLogin);
btnCancleLogin.addActionListener(this);
//initMain();
}
/**
* 初始化用户登陆成功后,显示主窗体。
* @param v 好友列表。
*/
private void initMain(Vector<FriendUser> v){
newMSG(25);
selfUser = v.get(0);
v.remove(0);
setTitle("JQ2008 "+selfUser.getJqnum());
popupMenu = new JPopupMenu();
itemChat = new JMenuItem("发送即时消息");
itemDelete = new JMenuItem("删除该好友");
itemFriendInfo = new JMenuItem("查看好友资料");
itemLog = new JMenuItem("聊天记录");
popupMenu.add(itemChat);
popupMenu.add(itemFriendInfo);
popupMenu.addSeparator();
popupMenu.add(itemLog);
popupMenu.addSeparator();
popupMenu.add(itemDelete);
menu.add(new JMenuItem("设置"));
menu.addSeparator();
menu.add(new JMenuItem("帮助"));
menu.addSeparator();
menu.add(itemQuit);
itemQuit.addActionListener(this);
btnMenu.addMouseListener(new ListMouseAdapter());
itemChat.addActionListener(this);
itemDelete.addActionListener(this);
itemFriendInfo.addActionListener(this);
itemLog.addActionListener(this);
btnMenu.setMargin(new Insets(0,5,0,5));
btnFind.setMargin(new Insets(0,5,0,5));
btnFind.addActionListener(this);
btnSys.setMargin(new Insets(0,5,0,5));
btnSys.addMouseListener(new ListMouseAdapter());
lblPhoto.setSize(50,50);
lblPhoto.setLocation(5, 5);
lblPhoto.setOpaque(true);
lblPhoto.setBackground(new Color(116,220,253,150));
lblPhoto.setHorizontalAlignment(SwingConstants.CENTER);
lblPhoto.setIcon(new Portrait(selfUser.getPhoto(),selfUser.getState()));
lblPhoto.setBorder(new LineBorder(new Color(60,168,206),1,true));
boxState.setSize(50,20);
boxState.setLocation(60, 5);
boxState.addItem(UserState.ONLINESTATE);
boxState.addItem(UserState.HIDDENSTATE);
boxState.addItem(UserState.DEPARTURESTATE);
boxState.addItem(UserState.BUSYSTATE);
boxState.setSelectedIndex(selfUser.getState());
lblNickName.setSize(80,20);
lblNickName.setLocation(115,5);
lblNickName.setText(selfUser.getNickName()+"["+UserState.getStateName(selfUser.getState())+"]");
txtSignature.setText(selfUser.getSignature());
txtSignature.setEditable(false);
txtSignature.setLineWrap(true);
txtSignature.setBackground(getBackground());
JScrollPane spSign = new JScrollPane(txtSignature);
spSign.setSize(125,25);
spSign.setLocation(60, 30);
spSign.setBorder(new EmptyBorder(new Insets(0,0,0,0)));
JPanel paneTop = new JPanel();
paneTop.setLayout(null);
paneTop.setPreferredSize(new Dimension(200,60));
paneTop.add(lblPhoto);
paneTop.add(boxState);
paneTop.add(lblNickName);
paneTop.add(spSign);
listModel = new DefaultListModel();
for(FriendUser user:v){
listModel.addElement(user);
}
//System.out.println(v.size());
listFriend = new JList();
listFriend.setCellRenderer(new CompanyLogoListCellRenderer());
listFriend.setModel(listModel);
listFriend.setFixedCellHeight(50);
listFriend.addMouseListener(new ListMouseAdapter());
listFriend.addMouseMotionListener(new ListMouseAdapter());
JScrollPane sp = new JScrollPane(listFriend);
chat = new HashMap<Integer, ChatPane>();
for(int i=0;i<v.size();i++)
chat.put(v.get(i).getJqnum(), null);
JPanel paneBottom = new JPanel();
paneBottom.setLayout(new FlowLayout(FlowLayout.LEADING,5,5));
paneBottom.add(btnMenu);
paneBottom.add(btnSys);
paneBottom.add(btnFind);
setVisible(false);
btnCancleLogin.removeActionListener(this);
remove(fillWidth);
remove(lblLoginBar);
remove(btnCancleLogin);
validate();
//repaint();
setLayout(new BorderLayout());
add(paneTop,BorderLayout.NORTH);
add(sp,BorderLayout.CENTER);
add(new FillWidth(5,5),BorderLayout.EAST);
add(new FillWidth(5,5),BorderLayout.WEST);
add(paneBottom,BorderLayout.SOUTH);
setVisible(true);
broadcastwindow = new Broadcastwindow();
}
/**
* 取消按钮、聊天按钮、删除好友、好友按钮、查找按钮事件。
*/
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnCancleLogin){
closeClient();
System.exit(0);
return;
}
if(e.getSource()==itemChat){
chatWithFriend();
return;
}
if(e.getSource()==itemDelete){
JOptionPane.showMessageDialog(null, "功能制作中...");
return;
}
if(e.getSource()==itemFriendInfo){
JOptionPane.showMessageDialog(null, "功能制作中...");
return;
}
if(e.getSource()==itemLog){
JOptionPane.showMessageDialog(null, "功能制作中...");
return;
}
if(e.getSource()==btnFind){
if(findWindow==null)
findWindow = new FindWindow(this,false);
else{
findWindow.setVisible(true);
}
return;
}
if(e.getSource()==itemQuit){
quit();
closeClient();
System.exit(0);
}
}
/**
* 根据好友号码获得listFriendUser中的好友。
* @param jqnum 好友的jq号码。
* @return 好友的信息FriendUser类。不存在是返回空。
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -