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

📄 mainpane.java

📁 一个简单的程序稳操胜券用拖把有稳操胜券
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	 */
	private void dealRecord(Object obj,int type){
		if(obj instanceof Record){
			Record record = (Record)obj;
			FriendUser friendUser = getFriendUserFromList(record.getFromid());
			if(friendUser!=null){
				newMSG(type);
				ChatPane chatPane = chat.get(record.getFromid());
				if(chatPane==null){
					chatPane = new ChatPane(oos,friendUser,selfUser,true);
					chat.put(friendUser.getJqnum(), chatPane);
				}
				else if(chatPane.isDisplayable()){
					chatPane.setFocusable(true);
					chatPane.setState(NORMAL);
				}
				else{
					chatPane.setVisible(true);
				}
				chatPane.showRecord(friendUser.getNickName(),record,Color.BLUE);
			}
		}
	}
	
	/**
	 * 因为某些原因服务端使得客户端退出。
	 * @param message 退出的JQMessage对象。
	 */
	private void causeLetClientQuit(JQMessage message){
		closeClient();
		JOptionPane.showMessageDialog(null, message.getObj().toString());
		System.exit(0);
	}
	
	/**
	 * 书写消息线程。
	 * 2008-9-27
	 * @author		达内科技[Tarena Training Group]
	 * @version	1.0
	 * @since		JDK1.6(建议) 
	 */
	private class WriteThread extends Thread{
		private JQMessage message = null;
		public WriteThread(JQMessage message) {
			this.message = message;
		}
		public void run() {
			try {
				if(oos!=null){
					oos.writeObject(message);
					oos.flush();
				}
			} catch (IOException e) {
				System.out.println("发生异常:"+e.getMessage());
				closeClient();
				JOptionPane.showMessageDialog(null, "和服务端连接发生错误:"+e.getMessage()+",请重新登录!");
				System.exit(0);
			}
		}
	}
	
	/**
	 * 关闭到服务端的连接。
	 */
	private void closeClient(){
		try {
			if(oos!=null)oos.close();oos = null;
			if(ois!=null)ois.close();ois = null;
			if(client!=null)client.close();client=null;
		} catch (IOException e) {
			System.out.println("错误:"+e.getMessage());
		}
	}
	
	/** 
	 * 查找好友窗口。
	 * 2008-9-27
	 * @author		达内科技[Tarena Training Group]
	 * @version	1.0
	 * @since		JDK1.6(建议) 
	 */
	private class FindWindow extends JDialog implements ActionListener{
		private JTabbedPane paneFindWay = new JTabbedPane();
		private JPanel paneBtn = new JPanel();
		private JButton btnFind = new JButton("查找");
		private JButton btnClose = new JButton("关闭");
		private JButton btnPrevious = new JButton("上一步");
		private JButton btnAddFriend = new JButton("加为好友");
		
		private JPanel paneBaseFind = new JPanel();
		private CardLayout card = new CardLayout();
		
		private JPanel paneBaseFirst = new JPanel();
		private JPanel paneBaseSecond = new JPanel();
		
		private JLabel lblInfo = new JLabel("在此,您可以设置精确的查询条件来查找用户。");
		private JRadioButton btnWhoIsOnline = new JRadioButton("看谁在线上");
		private JRadioButton btnExactFind = new JRadioButton("精确查找");
		private JLabel lblExactFind = new JLabel();
		public JLabel lblOnlineNum = new JLabel("当前在线人数 :   未知");
		
		private JLabel lblInfo2 = new JLabel("以下是JQ为您查找到的用户。");
		public JTable tableUser = null;
		private DefaultTableModel model = new MyDefaultTableModel();
		
		private Color bgColor = new Color(252,254,252);
		
		public FindWindow(Frame owner, boolean modal) {
			super(owner, modal);
			
			setTitle("JQ2008 查找/添加好友");
			setSize(400,325);
			setResizable(false);
			Toolkit tk=Toolkit.getDefaultToolkit();
			setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2);
			try {
				setIconImage(ImageIO.read(getClass().getResource("/client/images/searchbutton.gif")));
			} catch (IOException e) {
				System.out.println("错误:"+e.getMessage());
			}
			init();
			
			setDefaultCloseOperation(DISPOSE_ON_CLOSE);
			setVisible(true);
			
			dealFindUser(40);
			model.setRowCount(0);
		}
		
		private void init(){
			paneBtn.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
			paneBtn.add(btnFind);
			paneBtn.add(btnClose);
			
			lblInfo.setPreferredSize(new Dimension(350,34));
			lblInfo.setHorizontalAlignment(SwingConstants.LEFT);
			//lblInfo.setIcon(new ImageIcon(getClass().getResource("../images/searchinfo.gif")));
			lblInfo.setIcon(new ImageIcon(getClass().getResource("/client/images/searchinfo.gif")));
			ButtonGroup group = new ButtonGroup();
			group.add(btnWhoIsOnline);
			group.add(btnExactFind);
			btnWhoIsOnline.setOpaque(true);
			btnWhoIsOnline.setSelected(true);
			btnWhoIsOnline.setBackground(bgColor);
			btnWhoIsOnline.setPreferredSize(new Dimension(218,20));
			btnExactFind.setOpaque(true);
			btnExactFind.setBackground(bgColor);
			btnExactFind.setPreferredSize(new Dimension(218,20));
			lblExactFind.setIcon(new ImageIcon(MainPane.class.getResource("/client/images/searchexact.gif")));
			lblOnlineNum.setPreferredSize(new Dimension(338,25));
			
			paneBaseFirst.setLayout(new FlowLayout(FlowLayout.CENTER,0,3));
			paneBaseFirst.setOpaque(true);
			paneBaseFirst.setBackground(bgColor);
			paneBaseFirst.add(lblInfo);
			paneBaseFirst.add(btnWhoIsOnline);
			paneBaseFirst.add(btnExactFind);
			paneBaseFirst.add(lblExactFind);
			paneBaseFirst.add(lblOnlineNum);
			//paneBaseFirst.add();
			
			lblInfo2.setIcon(new ImageIcon(getClass().getResource("/client/images/searchinfo.gif")));
			lblInfo2.setPreferredSize(new Dimension(360,34));
			lblInfo2.setOpaque(true);
			lblInfo2.setBackground(bgColor);
			String[] data = {"账号","昵称","个性签名"};
			
			model.addColumn(data[0]);
			model.addColumn(data[1]);
			model.addColumn(data[2]);
			tableUser = new JTable(model);
			TableRowSorter sorter = new TableRowSorter(model); 
			tableUser.setRowSorter(sorter); 
			tableUser.setRowHeight(22);
			tableUser.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
			tableUser.setPreferredScrollableViewportSize(new Dimension(360,160));
			TableColumn tcJQ = tableUser.getColumn(data[0]);
			tcJQ.setPreferredWidth(80);
			TableColumn tcNick = tableUser.getColumn(data[1]);
			tcNick.setPreferredWidth(90);
			TableColumn tcSign = tableUser.getColumn(data[2]);
			tcSign.setPreferredWidth(180);
			paneBaseSecond.setOpaque(true);
			paneBaseSecond.setBackground(new Color(252,254,252));
			paneBaseSecond.add(lblInfo2);
			paneBaseSecond.add(new JScrollPane(tableUser));
			
			paneBaseFind.setLayout(card);
			paneBaseFind.add("first", paneBaseFirst);
			paneBaseFind.add("second", paneBaseSecond);
			
			paneFindWay.add("基本查找",paneBaseFind);
			
			//add(new FillWidth(5,5),BorderLayout.NORTH);
			add(paneFindWay,BorderLayout.CENTER);
			add(new FillWidth(5,5),BorderLayout.EAST);
			add(new FillWidth(5,5),BorderLayout.WEST);
			add(paneBtn,BorderLayout.SOUTH);
			
			btnFind.addActionListener(this);
			btnClose.addActionListener(this);
			
			DefaultTableCellRenderer LblRenderer = new DefaultTableCellRenderer() { 
		 	    public void setValue(Object value) { 
		 	        if (value instanceof JLabel) {
		 	        	JLabel lbl = (JLabel)value;
		 	        	setIcon(lbl.getIcon());
		 	        	setText(lbl.getText());
		 	        } else { 
		 	        	super.setValue(value); 
		 	        } 
		 	    } 
			};
			LblRenderer.setHorizontalAlignment(SwingConstants.LEFT);
			tcJQ.setCellRenderer(LblRenderer);
			DefaultTableCellRenderer dtc1 = (DefaultTableCellRenderer)tableUser.getCellRenderer(0, 1);
			dtc1.setHorizontalAlignment(SwingConstants.CENTER);
			DefaultTableCellRenderer dtc2 = (DefaultTableCellRenderer)tableUser.getCellRenderer(0, 1);
			dtc2.setHorizontalAlignment(SwingConstants.CENTER);
			
		}
		
		private void dealFindUser(int type){
			JQMessage message = new JQMessage();
			message.setType(type);
			message.setObj(null);
			new WriteThread(message).start();
		}
		
		public void actionPerformed(ActionEvent e) {
			if(e.getSource()==btnFind){
				btnFind.removeActionListener(this);
				paneBtn.remove(btnFind);
				btnPrevious.addActionListener(this);
				btnAddFriend.addActionListener(this);
				paneBtn.add(btnPrevious,0);
				paneBtn.add(btnAddFriend,1);
				paneBtn.validate();
				paneBtn.repaint();
				card.next(paneBaseFind);
				if(btnWhoIsOnline.isSelected()){
					dealFindUser(42);
					model.setRowCount(0);
				}
			}
			if(e.getSource()==btnClose){
				dispose();
				return;
			}
			if(e.getSource()==btnPrevious){
				btnPrevious.removeActionListener(this);
				btnAddFriend.removeActionListener(this);
				paneBtn.remove(btnPrevious);
				paneBtn.remove(btnAddFriend);
				btnFind.addActionListener(this);
				paneBtn.add(btnFind,0);
				paneBtn.validate();
				paneBtn.repaint();
				card.previous(paneBaseFind);
				dealFindUser(40);
			}
			if(e.getSource()==btnAddFriend){
				int row = tableUser.getSelectedRow();
				if(row==-1){
					JOptionPane.showMessageDialog(null, "请选定一个用户!");
					return;
				}
				Object value = tableUser.getValueAt(row, 0);
				if(value instanceof JLabel){
					Integer jqnum = Integer.parseInt(((JLabel)value).getText());
					JQMessage message = new JQMessage();
					message.setType(44);
					message.setObj(jqnum);
					new WriteThread(message).start();
				}
				System.out.println(value);
			}
		}
		
		private void addOnlineUser(FriendUser user){
			if(isVisible()){
				JLabel lblJQNum = new JLabel(user.getJqnum()+"");
				lblJQNum.setIcon(new Portrait(user.getPhoto(),user.getState(),false));
				Object[] data = {lblJQNum,user.getNickName(),user.getSignature()};
				model.addRow(data);
			}
		}
	}
	
	private class MyDefaultTableModel extends DefaultTableModel{
		public boolean isCellEditable(int row, int column) {
			super.isCellEditable(row, column);
			return false;
		}
		/*public Class getColumnClass(int c) {
			if(c==0)
				return JLabel.class;
			else
				return super.getColumnClass(c); 
		}*/
	} 
	
	/**
	 * 系统消息窗口。
	 * 2008-9-27
	 * @author		达内科技[Tarena Training Group]
	 * @version	1.0
	 * @since		JDK1.6(建议) 
	 */
	private class Broadcastwindow extends JDialog implements WindowFocusListener{
		private JTextArea txt = new JTextArea("暂无系统消息!");
		public Broadcastwindow() {
			super();
			setTitle("系统消息");
			setSize(200,160);
			setResizable(false);
			setLocation(MainPane.this.getLocationOnScreen().x,MainPane.this.getLocationOnScreen().y+357);
			
			JScrollPane sp = new JScrollPane(txt);
			txt.setEditable(false);
			txt.setLineWrap(true);
			sp.setSize(190, 125);
			sp.setLocation(5, 2);
			setLayout(null);
			add(sp);
			
			addWindowFocusListener(this);
			setDefaultCloseOperation(DISPOSE_ON_CLOSE);
			//setVisible(true);
		}
		public void windowGainedFocus(WindowEvent e) {}
		public void windowLostFocus(WindowEvent e) {
			dispose();
		}
		public void showNow(){
			setLocation(MainPane.this.getLocationOnScreen().x,MainPane.this.getLocationOnScreen().y+357);
			setVisible(true);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -