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

📄 clientgui.java

📁 实现简单的群聊功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
						.addGroup(
								jPanelLayout
										.createSequentialGroup()
										.addContainerGap(
												javax.swing.GroupLayout.DEFAULT_SIZE,
												Short.MAX_VALUE)
										.addGroup(
												jPanelLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.BASELINE)
														.addComponent(
																serverLabel)
														.addComponent(
																serverTextField,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																infoLabel,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																22,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addPreferredGap(
												javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
										.addGroup(
												jPanelLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.BASELINE)
														.addComponent(idLabel)
														.addComponent(
																idTextField,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(nameLabel)
														.addComponent(
																nameTextField,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																submitButton)
														.addComponent(
																exitButton))
										.addPreferredGap(
												javax.swing.LayoutStyle.ComponentPlacement.RELATED)
										.addComponent(
												jScrollPane1,
												javax.swing.GroupLayout.PREFERRED_SIZE,
												261,
												javax.swing.GroupLayout.PREFERRED_SIZE)
										.addGroup(
												jPanelLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.LEADING)
														.addGroup(
																jPanelLayout
																		.createSequentialGroup()
																		.addGap(
																				26,
																				26,
																				26)
																		.addComponent(
																				sendMsgButton,
																				javax.swing.GroupLayout.PREFERRED_SIZE,
																				69,
																				javax.swing.GroupLayout.PREFERRED_SIZE))
														.addGroup(
																jPanelLayout
																		.createSequentialGroup()
																		.addPreferredGap(
																				javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																		.addComponent(
																				jScrollPane2,
																				javax.swing.GroupLayout.PREFERRED_SIZE,
																				javax.swing.GroupLayout.DEFAULT_SIZE,
																				javax.swing.GroupLayout.PREFERRED_SIZE)))
										.addGap(15, 15, 15)
										.addGroup(
												jPanelLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.BASELINE)
														.addComponent(jLabel0)
														.addComponent(
																sendFileButton)
														.addComponent(
																fileTextField,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(jLabel1)
														.addComponent(
																receiverComboBox,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																18,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addContainerGap()));

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
				getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanel,
				javax.swing.GroupLayout.DEFAULT_SIZE,
				javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
		layout.setVerticalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanel,
				javax.swing.GroupLayout.DEFAULT_SIZE,
				javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));

		pack();
	}// </editor-fold>
	//GEN-END:initComponents

	private void receiverComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		
	}

	private void serverTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
	}

	private void sendMsgButtonActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String sendersay = userid + " 说:  (" + sdf.format(date) + ")";
		//chartTextArea.append(sendersay + "\n" + msgTextArea.getText() + "\n\n");
		try {
			out.writeUTF("message:" + sendersay + "\n" + msgTextArea.getText()
					+ "\n" + "userid:" + userid);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			chartTextArea.append("——消息发送失败");
		}
		msgTextArea.setText("");
	}

	private void sendFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		if (file == null || !file.exists()) {
			file = null;
			return;
		}
		String receiver=(String)receiverComboBox.getSelectedItem();
		if(userid.equals(receiver))
		{
			JOptionPane.showMessageDialog(jPanel,"不能给自己发送文件!");
			return;
		}
		DataInputStream dis = null;
		try {
			dis = new DataInputStream(new BufferedInputStream(
					new FileInputStream(file)));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			out.writeUTF("file:" + file.getName() + ";sender:" + userid
					+ ";receiver:"+receiver);
			out.flush();
			byte[] buf = new byte[1024*1024];

			int len = 0;
			if (dis != null)
				len = dis.read(buf);
			
			out.write(buf, 0, len);
			out.flush();
			JOptionPane.showMessageDialog(jPanel, "文件传送成功!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(jPanel, "文件传送失败!");
			return;
		}
	}

	private void fileTextFieldMouseClicked(java.awt.event.MouseEvent evt) {
		// TODO add your handling code here:
		JFileChooser chooser = new JFileChooser();
		chooser.setMultiSelectionEnabled(false);

		if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
			sourcefilepath = chooser.getSelectedFile().getAbsolutePath();
			fileTextField.setText(sourcefilepath);
		}
		if (sourcefilepath != null) {
			file = new File(sourcefilepath);
			sourcefilepath = null;
		}
	}

	private void fileTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
	}

	private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		socket = null;
		in = null;
		out = null;
		System.exit(0);
	}

	private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		try {
			socket = new Socket(serverTextField.getText().replace(" ", ""),
					9090);
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream(socket.getOutputStream());
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			infoLabel.setText("无法识别的主机地址!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			infoLabel.setText("连接失败!");
		}
		if (socket != null) {
			InetAddress address = socket.getInetAddress();
			infoLabel.setText("连接 " + address + " 成功!");
			try {
				userid = idTextField.getText();
				username = nameTextField.getText();
				out.writeUTF("userid:" + userid + ";username:" + username
						+ ";ip:" + address);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (thread == null) {
			thread = new Thread(this);
			thread.start();
		}
	}

	private void nameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {
			String msg;
			try {
				msg = in.readUTF();
				if (msg.startsWith("userid:")) {
					String userid = msg.substring(msg.indexOf("userid:")
							+ "userid:".length(), msg.indexOf(";username:"));
					String username = msg.substring(msg.indexOf("username:")
							+ "username:".length(), msg.indexOf(";ip:"));
					String ip = msg.substring(msg.lastIndexOf("ip:")
							+ "ip:".length());
					ulist.add(new User(userid, username, "", "ip", ""));
					uarray = new String[ulist.size()];
					for (int i = 0; i < ulist.size(); i++) {
						uarray[i] = ((User) ulist.get(i)).getUserid();
					}
					receiverComboBox
							.setModel(new javax.swing.DefaultComboBoxModel(
									uarray));
				} else if (msg.startsWith("message:"))
					chartTextArea.append(msg.substring(msg.indexOf(":") + 1)
							+ "\n");
				else if(msg.startsWith("file:"))
				{
					String filename=msg.substring(msg.indexOf("file:")+"file:".length(),msg.indexOf(";sender:"));
					String sender=msg.substring(msg.indexOf(";sender:")+";sender:".length());
					JOptionPane.showMessageDialog(jPanel,"用户"+sender+"正在向您发送文件"+filename+"。");
					DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\"+filename))));
					byte[] buf=new byte[1024*1024];
			
					int len=0;
					if(in!=null)
						len=in.read(buf);
					System.out.println(len);
					
					dos.write(buf,0,len);
					dos.flush();
					dos.close();
					JOptionPane.showMessageDialog(jPanel,"文件接收成功!");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new ClientGUI().setVisible(true);
			}
		});
	}

	//GEN-BEGIN:variables
	// Variables declaration - do not modify
	private javax.swing.JTextArea chartTextArea;
	private javax.swing.JButton exitButton;
	private javax.swing.JTextField fileTextField;
	private javax.swing.JLabel idLabel;
	private javax.swing.JTextField idTextField;
	private javax.swing.JLabel infoLabel;
	private javax.swing.JLabel jLabel0;
	private javax.swing.JLabel jLabel1;
	private javax.swing.JPanel jPanel;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JScrollPane jScrollPane2;
	private javax.swing.JTextArea msgTextArea;
	private javax.swing.JLabel nameLabel;
	private javax.swing.JTextField nameTextField;
	private javax.swing.JComboBox receiverComboBox;
	private javax.swing.JButton sendFileButton;
	private javax.swing.JButton sendMsgButton;
	private javax.swing.JLabel serverLabel;
	private javax.swing.JTextField serverTextField;
	private javax.swing.JButton submitButton;
	// End of variables declaration//GEN-END:variables
}

⌨️ 快捷键说明

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