📄 chat_frame.java
字号:
package chatroom;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import sun.audio.*;
public class Chat_Frame extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Container con;
JPanel panel1;
JPanel panel2;
JPanel panel3;
JPanel panel4;
JLabel label1;
JLabel label2;
JLabel label4;
JLabel label5;
JLabel label6;
JLabel label7;
JLabel label0;
List lstMsg;
JTextField field1;
JTextArea area1;
JTextArea area2;
JTextArea area3;
JButton butt1;
JButton butt2;
BorderLayout l1;
String nickname = new String("11111111111");
String st,p;
public final static int PORT=1234; //为其他用户发送信息的端口
DatagramSocket socket=null;
InetAddress group;
DatagramPacket packet;
DatagramSocket s = null;
MulticastSocket socketr;
Socket Csocket,sk;
CCListener cclisten;
public Chat_Frame(){
while(nickname.length()>9||nickname.length()==0){
nickname = JOptionPane.showInputDialog(null,"请输入昵称","登陆",3);
if(nickname.length()>9)
JOptionPane.showMessageDialog(null,"昵称长度需要小于10","非法昵称",JOptionPane.ERROR_MESSAGE);
if(nickname.length()==0)
JOptionPane.showMessageDialog(null,"昵称长度需要等于0","非法昵称",JOptionPane.ERROR_MESSAGE);
}
if(nickname==null)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JOptionPane.showMessageDialog(null,"欢迎"+nickname+"的到来!我们的宗旨是:说你想说的话,让别人也跟着说吧!");
Ring(1);
join_to_group();
room_init();
cf_listener();
}
private void cf_listener() {
// TODO Auto-generated method stub
try
{
socketr = new MulticastSocket(PORT);
socketr.joinGroup(group);
}catch(IOException e)
{
e.printStackTrace();
}
cclisten = new CCListener(socketr,this);
}
public void room_init(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBackground(Color.cyan);
this.setSize(500,500);
this.setResizable(false);
this.setTitle("*聊吧*");
this.setIconImage(getToolkit().getImage("image\\xin.gif"));
con=this.getContentPane();
Icon bg2 = new ImageIcon("image\\new.gif");
Icon bg4 = new ImageIcon("image\\7.gif");
Icon bg5 = new ImageIcon("image\\8.gif");
lstMsg = new List();
//lstFriend.addActionListener(this);
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
Font ft=new Font("宋体",Font.PLAIN,18);
label0=new JLabel();
label0.setIcon(bg5);
label1=new JLabel("欢迎来*聊吧*");
label1.setForeground(Color.RED);
label1.setFont(ft);
label2=new JLabel();
label5=new JLabel();
label6=new JLabel();
label2.setIcon(bg4);
label5.setIcon(bg4);
label6.setIcon(bg4);
label7=new JLabel();
label7.setIcon(bg2);
label4=new JLabel();
label4.setText(nickname+":");
label4.setForeground(Color.RED);
area1=new JTextArea();
area2=new JTextArea();
field1=new JTextField();
field1.setText(nickname+"请输入你要发送的信息!!");
field1.addKeyListener(new KeyAdapter (){//添加事件按键事件监听,当文本框中按下"回车"时则发送文本框消息
public void keyPressed(KeyEvent ek){
if(ek.getKeyChar() == '\n')
try {
send_information();
Ring(3);
}
catch(Exception e1)
{
System.out.println("Error: " + e1);
}
}
});
butt1=new JButton("--发送--");
butt1.addActionListener(this);
butt2=new JButton("--连接--");
butt2.addActionListener(this);
l1=new BorderLayout();
panel1.add(label0);
panel1.add(label1);
panel1.add(label7);
panel2.setLayout(new BorderLayout());
panel2.add(lstMsg,"Center");
panel4.setLayout(new BorderLayout());
panel4.add(label4,"North");
panel4.add(field1,"Center");
panel3.add(label6);
panel3.add(butt1);
panel3.add(label2);
panel3.add(label2);
panel4.add(panel3,"South");
con.setLayout(l1);
con.add(panel1,"North");
con.add(panel2,"Center");
con.add(panel4,"South");
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Chat_Frame();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj=e.getSource();
if(obj==butt1){
send_information();
Ring(3);
}
}
public void send_information(){
try {
//发送一个数据包到组波组,数据包数据结构为:用户名+文本框中的内容
byte[] dataS = (nickname+":"+field1.getText()).getBytes();
packet = new DatagramPacket(dataS,dataS.length, group, PORT);
socket.send(packet);
field1.setText("");//重设文本框的内容为空,方便下一次输入
}
catch(Exception e1)
{
System.out.println("Error: " + e1);
}
}
public void processMsg(String str)//该方法为将字符串str显示到对话列表框中
{
lstMsg.add(str);
this.lstMsg.select(lstMsg.getItemCount()-1);
}
public void join_to_group(){
try {
group=InetAddress.getByName("238.0.0.0");
try {
socket=new DatagramSocket();
} catch (SocketException e1) {
// TODO Auto-generated catch block
System.out.println("1。组播地址有错!!");
}
} catch (UnknownHostException e2) {
// TODO Auto-generated catch block
System.out.println("2。组播地址有错!!!");
}
}
public void Ring(int i)
{
FileInputStream file;
try {
switch(i)
{
case 1:
file=new FileInputStream("sound\\BELL.wav");
break;
case 2:
file=new FileInputStream("sound\\ahoh.wav");
break;
case 3:
file=new FileInputStream("sound\\notify.wav");
break;
default:
file=new FileInputStream("ahoh.wav");
}
AudioStream as=new AudioStream(file);
AudioPlayer.player.start(as);
}
catch (Exception e) {}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -