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

📄 talk.java

📁 有关JAVA的程序,研究P2P的chord协议,相信大家会喜欢的!
💻 JAVA
字号:
package javanet;

import java.awt.*;
import javax.swing.*;
import javax.swing.DefaultComboBoxModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import java.io.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;

public class Talk
    extends JFrame implements Runnable{
  JOptionPane prompt=new JOptionPane();
  DatagramSocket socket;
  DatagramPacket packet;
  DatagramSocket sendsocket;
  byte buf[]=new byte[512];
  InetAddress addr=null;
  String words;
  DefaultComboBoxModel model=new DefaultComboBoxModel();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  JScrollPane jScrollPane2 = new JScrollPane();
  JTextArea jTextArea2 = new JTextArea();
  JLabel jLabel1 = new JLabel();
  ImageIcon icon=new ImageIcon(Talk.class.getResource("1.jpg"));
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JComboBox jComboBox1 = new JComboBox();
  Object tempaddr;
  int i=0;
  JLabel jLabel2 = new JLabel();
  boolean flag=true;
  public Talk() {
    try {
      jbInit();
    }
    catch(BindException er){prompt.showMessageDialog(this,"端口被占用,不用开启服务","错误",0);jButton1.setEnabled(false);}
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    setSize(new Dimension(410,370));
    this.addWindowListener(new Talk_this_windowAdapter(this));
    getContentPane().setLayout(null);
    jScrollPane1.setBounds(new Rectangle(20, 10, 360, 140));
    jTextArea1.setEditable(false);
    jScrollPane2.setBounds(new Rectangle(20, 180, 360, 100));
    jTextArea2.setText("");
    jTextArea2.addKeyListener(new Talk_jTextArea2_keyAdapter(this));
    jLabel1.setIcon(icon);
    jLabel1.setBounds(new Rectangle(0, 150, 410, 30));
    jButton1.setBounds(new Rectangle(223, 291, 67, 29));
    jButton1.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
    jButton1.setText("发送");
    jButton1.addActionListener(new Talk_jButton1_actionAdapter(this));
    jButton2.setBounds(new Rectangle(303, 291, 67, 29));
    jButton2.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
    jButton2.setText("关闭");
    jButton2.addActionListener(new Talk_jButton2_actionAdapter(this));
    jComboBox1.setEditable(true);
    jComboBox1.setBounds(new Rectangle(86, 291, 91, 29));
    jComboBox1.setModel(model);
    jLabel2.setFont(new java.awt.Font("Dialog", Font.PLAIN, 13));
    jLabel2.setText("发送地址:");
    jLabel2.setBounds(new Rectangle(24, 291, 60, 29));
    this.getContentPane().add(jScrollPane1);
    this.getContentPane().add(jScrollPane2);
    this.getContentPane().add(jLabel1);
    this.getContentPane().add(jButton2);
    this.getContentPane().add(jButton1);
    this.getContentPane().add(jLabel2);
    this.getContentPane().add(jComboBox1);
    jScrollPane2.getViewport().add(jTextArea2);
    jScrollPane1.getViewport().add(jTextArea1);
    jScrollPane1.setWheelScrollingEnabled(true);
    jScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED );
    socket=new DatagramSocket(8181);
    new Thread(this).start();
    this.setResizable(false);
    setTitle("Press the KeyBoard,let the world listen to your voice!");
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = this.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    this.setLocation( (screenSize.width - frameSize.width) / 2,
                  (screenSize.height - frameSize.height) / 2);

  }
  public void run()
  {
    while(flag)
    {
      try
      {
        jTextArea2.grabFocus();
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);
        tempaddr=packet.getAddress().toString();
        jTextArea1.setText(jTextArea1.getText()+"\n"+new getTime().time+"     "+tempaddr+"对你说:\n"+new String(packet.getData()));
        if(model.getIndexOf(tempaddr)==-1)
        {
          model.addElement(tempaddr.toString().replaceAll("/",""));
          setTitle("新用户"+tempaddr+"向你发来消息");
        }
      }
      catch (IOException ex) {}
    }
  }
  public void send()
  {
    try {
      addr=InetAddress.getByName(jComboBox1.getSelectedItem().toString());
      words=jTextArea2.getText();
      if(words.length()==0){return;}
      sendsocket = new DatagramSocket();
      packet=new DatagramPacket(words.getBytes(),words.getBytes().length,addr,8181);
      sendsocket.send(packet);
      jTextArea2.setText("");
      jTextArea1.setText(jTextArea1.getText()+"\n"+new getTime().time+"     "+"你对  "+addr+"说:\n"+words);
    }
    catch (Exception ex) {prompt.showMessageDialog(this,"未能发送消息到指定主机","发送失败",0);}
  }

  public void jButton1_actionPerformed(ActionEvent e) {
    send();
  }

  public void jButton2_actionPerformed(ActionEvent e) {
    flag=false;
    this.dispose();
    try{socket.close();}catch(Exception er){}
  }

  public void jTextArea2_keyPressed(KeyEvent e) {
    if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
      send();
    }
  }

  public void this_windowClosing(WindowEvent e) {
    jButton2_actionPerformed((ActionEvent)jButton2.getAction());
  }
}

class Talk_this_windowAdapter
    extends WindowAdapter {
  private Talk adaptee;
  Talk_this_windowAdapter(Talk adaptee) {
    this.adaptee = adaptee;
  }

  public void windowClosing(WindowEvent e) {
    adaptee.this_windowClosing(e);
  }
}

class Talk_jTextArea2_keyAdapter
    extends KeyAdapter {
  private Talk adaptee;
  Talk_jTextArea2_keyAdapter(Talk adaptee) {
    this.adaptee = adaptee;
  }

  public void keyPressed(KeyEvent e) {
    adaptee.jTextArea2_keyPressed(e);
  }
}

class Talk_jButton2_actionAdapter
    implements ActionListener {
  private Talk adaptee;
  Talk_jButton2_actionAdapter(Talk adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}

class Talk_jButton1_actionAdapter
    implements ActionListener {
  private Talk adaptee;
  Talk_jButton1_actionAdapter(Talk adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

⌨️ 快捷键说明

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