⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainpane.java

📁 一个简单的程序稳操胜券用拖把有稳操胜券
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**
  * @(#)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 + -