📄 frame1.java~173~
字号:
package chat;import java.awt.*;import java.awt.event.*;import javax.swing.*;import com.borland.jbcl.layout.*;import java.util.*;import java.net.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class Frame1 extends JFrame { private JPanel contentPane; private BorderLayout borderLayout1 = new BorderLayout(); private JPanel jPanel1 = new JPanel(); private JTextField jTextField1 = new JTextField(); private JCheckBox jCheckBox1 = new JCheckBox(); private JButton SendButton = new JButton(); private JSplitPane jSplitPane1 = new JSplitPane(); private JScrollPane jScrollPane1 = new JScrollPane(); private JScrollPane jScrollPane2 = new JScrollPane(); private JList jList1 = new JList(); private JTextArea jTextArea1 = new JTextArea(); private JButton QuitButton = new JButton(); private JButton RefreshButton = new JButton(); private Receiver MyReceiver; private Thread ReceiveThread; private Vector userList; private InetAddress localHost; private InetAddress MulticastAddress; private final int ServerPort=3338; private final int PacketSize=256; //Construct the frame public Frame1() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension(450, 300)); this.setTitle("chat"); jTextField1.setToolTipText(""); jTextField1.setColumns(15); jCheckBox1.setText("广播"); SendButton.setText("发送"); SendButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { SendButton_actionPerformed(e); } }); jTextArea1.setToolTipText(""); jSplitPane1.setPreferredSize(new Dimension(134, 271)); jList1.setBackground(new Color(197, 190, 255)); jList1.setSelectionBackground(new Color(10, 131, 106)); jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jList1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jList1_mouseClicked(e); } }); jScrollPane1.setPreferredSize(new Dimension(130, 132)); QuitButton.setText("退出"); QuitButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { QuitButton_actionPerformed(e); } }); RefreshButton.setToolTipText(""); RefreshButton.setText("刷新"); RefreshButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { RefreshButton_actionPerformed(e); } }); contentPane.add(jPanel1, BorderLayout.SOUTH); jPanel1.add(jCheckBox1, null); jPanel1.add(jTextField1, null); jPanel1.add(SendButton, null); jPanel1.add(RefreshButton, null); jPanel1.add(QuitButton, null); contentPane.add(jSplitPane1, BorderLayout.CENTER); jSplitPane1.add(jScrollPane2, JSplitPane.RIGHT); jScrollPane2.getViewport().add(jTextArea1, null); jSplitPane1.add(jScrollPane1, JSplitPane.LEFT); jScrollPane1.getViewport().add(jList1, null); userList = new Vector(); jList1.setListData(userList); try{ localHost=InetAddress.getLocalHost(); jTextField1.setText(""); }catch(Exception ex){ jTextArea1.append(ex.toString()); } byte tempbyte[]=localHost.getAddress(); int tempint[]=new int[10]; for(int i=0; i<4; i++) tempint[i]=tempbyte[i] & 0xff; MulticastAddress=InetAddress.getByName(tempint[0]+"."+tempint[1]+"."+tempint[2]+"."+255); MyReceiver=new Receiver(); ReceiveThread=new Thread(MyReceiver); ReceiveThread.start(); Sender s=new Sender("<system ECHO>",MulticastAddress); Thread t2=new Thread(s); t2.start(); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } void SendButton_actionPerformed(ActionEvent e) { if(jCheckBox1.isSelected()){ Sender s=new Sender(jTextField1.getText(),MulticastAddress); Thread t=new Thread(s); t.start(); }else if(jList1.getSelectedIndex()!=-1){ String HostName=userList.get(jList1.getSelectedIndex()).toString(); try{ Sender s=new Sender(jTextField1.getText(),InetAddress.getByName(HostName)); Thread t=new Thread(s); t.start(); }catch(Exception e1){ jTextArea1.append(e1.toString()); } } jTextField1.setText(""); } void jList1_mouseClicked(MouseEvent e) { // } void QuitButton_actionPerformed(ActionEvent e) { System.exit(0); } private class Receiver implements Runnable{ private DatagramSocket ReceiverSocket=null; public void run(){ try{ ReceiverSocket=new DatagramSocket(ServerPort); jTextArea1.append("系统消息:监听服务在端口"+ReceiverSocket.getLocalPort()+"正常启动\n"); }catch(java.net.SocketException e){ jTextArea1.append("系统错误:"+e.toString()+"\n"); } while(true){ DatagramPacket packet; InetAddress address; byte buf[]; try{ buf=new byte[1024]; packet=new DatagramPacket(buf,1024); ReceiverSocket.receive(packet); address=packet.getAddress(); byte tempbyte[]=new byte[packet.getLength()]; for(int i=0;i<packet.getLength();i++){ tempbyte[i]=packet.getData()[i]; } String str=new String(tempbyte); if (str.equals(new String("<system ECHO>"))){ if(userList.indexOf(address.getHostAddress())==-1){ jTextArea1.append(address.getHostAddress()+"登陆成功\n"); Sender s=new Sender("<system OK>",address); Thread t2=new Thread(s); t2.start(); userList.add(address.getHostAddress()); jList1.updateUI(); } } else if(str.equals(new String("<system OK>"))){ if(userList.indexOf(address.getHostAddress())==-1){ userList.add(address.getHostAddress()); jList1.updateUI(); } } else{ if(userList.indexOf(address.getHostAddress())==-1){ userList.add(address.getHostAddress()); jList1.updateUI(); } jTextArea1.append("来自"+address.getHostAddress()+"的消息:\n"); jTextArea1.append(str+"\n"); } }catch(Exception e){ jTextArea1.append("系统错误:"+e.toString()+"\n"); } } } } private class Sender implements Runnable{ private String SendStr; private InetAddress Address; public Sender(String str,InetAddress addr){ SendStr=str; Address=addr; } public void run(){ DatagramSocket SenderSocket=null; DatagramPacket packet; byte buf[]; try{ SenderSocket=new DatagramSocket(); }catch(Exception e){ jTextArea1.append("系统错误:"+e.toString()+"\n"); } if(SenderSocket!=null){ try{ buf=SendStr.getBytes(); packet=new DatagramPacket(buf,buf.length,Address,ServerPort); SenderSocket.send(packet); }catch(Exception e){ jTextArea1.append("系统错误:"+e.toString()+"\n"); } } } } void RefreshButton_actionPerformed(ActionEvent e) { jList1.updateUI(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -