利用局域网聊天程序来锻炼j2se---------之挑战所有你心目中的高手
写之前思考了一下,本打算发布一下最终版本,并附带所有的注释就算大功告成了.
后来细细想了下,这样的聊天程序网上很多,同时,对于只看我注释来学这个项目的人来说,他即便看懂看会,
还只能是依葫芦画瓢,不懂一步步创建的原理和调试的方法.
所以今天,我会带着大家把开发局域网聊天的详细思路和步骤用文字和代码一句句写出来,同时发布最终版无注释代码,
此目的也是让大家自己读懂每个代码段为什么要这样写的原由.
好了下面就开始吧.
首先利用Eclipse新建一个项目,同样在项目里面新建一个类,这里的具体步骤我不多说了,相信大家都比我清楚.
做之前先思考下,第一步先做什么?
聊天程序我们直观的来说就是可以有个输入栏发布消息,同时能在另一个界面上看到自己已经发布的消息从而确认发布出去了.
好,那么首先做的就是画一个你认为满意的窗口.
Frame 图形窗口类,根据我的笔记gui这课,我想你应该能画出来.
特别照顾下不喜欢查jdk帮助文档的朋友,TextField是单输入栏.TextArea是多行输入栏.(我怎么知道的,查的呗)
我简单画了个大概,大家比较下.
import java.awt.*;
public class Client extends Frame {
//由于聊天系统有一个用户的输入框,那么就用输入栏TextField类来编写
//为什么写在成员方法里,那是因为方便被窗口方法调用
TextField text=new TextField();//建立了text文本输入对象
//由于上面的是单行,作为用户输入可以,但显示栏就不行,所以必须找个多行的方法
TextArea teext=new TextArea();//多行文本编辑器
public static void main(String[] args) {
new Client().launchFrame();
}
public void launchFrame() {
// 由于对相关方法不熟悉,用this来使得有代码提示。
// 设置窗口,首先是确定位置,如果不确定,那么默认是左上角
this.setLocation(300, 200);// 移到新位置//从Component继承的
// 下面要设置窗口的大小
this.setSize(244, 366);// 调整大小//window类继承的
// 为了不让用户自己变化窗口的大小,所以要限制大小不能变化
this.setResizable(false);// 设置此窗体是否可由用户调整大小//自己的方法
// 显示窗口可以设置不同的颜色来增加视觉效果,当然,这里还是设置为默认的白色
this.setBackground(Color.white);// 设置背景色//Component类继承
//加载并设置输入栏位置,注意布局管理器的运用
this.add(text,BorderLayout.SOUTH);//这里,把输入栏载入到窗口,同时用布局管理器设置在南边
this.add(teext,BorderLayout.NORTH);//注意,鼠标输入筐是按照第一个设置哪个输入栏而默认的
//由于上面两个输入栏都是默认的大小,所以对于窗口来说高度不一定合适,所以在没有设置输入栏大小的时候用自动设置来的比较方便
this.pack();//自动 设置大小
this.setVisible(true);// 把上面的所有设置的结果 显示出来//Window 类继承
}
}
注释写的太多影响观看了,后面尽量少写点,恩.
下面我们运行下刚才的程序,有两个输入栏,同时也都能写文字,这时,我们去关闭该程序,发现他关不掉,只能在控制台中结束.那怎么办呢?
大家应该想起我的笔记上说过的监听类吧.那关闭窗口也有他的监听类和接口.不熟悉的朋友请回头看下我的笔记.恩
查找java.awt.event 图形事件包
找到WindowListener用于接收窗口事件的侦听器接口.
然后找到 windowClosing(WindowEvent e) 方法,由于该方法是 WindowAdapter继承下来的子方法.
所以我们创建WindowAdapter方法并实现windowClosing方法的操作,这样可以避免所有的方法都一一实现.
说到这,大家考虑下怎么写,写监听有三个方法,第一是写个并排的外部类,以后别的方法也可以调用.
第二是写个内部类,可以针对主方法做更多的方法实现.当然还有第三个就是写个匿名类.尽量不做其他的处理用.
考虑了一下,我想还是用匿名类比较合适.本程序在关闭事件上就只打算简单的实现关闭操作.
好具体写法如下:
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// TODO 自动生成方法存根
System.exit(0);
}
});
顺带说下,如果你还没用Eclipse工具的话,请赶紧开始用它.应为windowClosing方法是通过编辑器来生成的.
下面考虑一个问题,我们需要在单文本输入栏上写东西,然后一敲回车,文字得移动到上面的多文本编辑框上.
这里又要使用另外一个监听器接口 ActionListener用于接收操作事件
考虑下这里具体该怎么写.
由于我们要输入文字,以后可能还要包装成管道流输出等,代码量会比较多,所以匿名类在这里就不会太方便了.
所以内部类是最好的方法
private class list implements ActionListener{
public void actionPerformed(ActionEvent e) {
//先获取输入栏的字符放到ss中
String ss=text.getText().trim();//去掉两边的空格后的字符串
//再把字符到多行输入栏显示出来
teext.setText(ss);
//然后把单行输入栏设置空
text.setText("");
}
}
同样,内部的方法通过编译器可以自动调出.好了,同时在显示窗口之前调用该方法.
text.addActionListener(new list());
^-^知道在哪里加入吧.
休息下,回来继续写.........