今天学习了一下简单聊天程序(类似QQ那种)的编写过程,从最初的0.1版本到最后的1.3版本,功能不断地增强,下面对一天的学习内容进行梳理。
版本0.1
我们的需求是显示一个窗体,其他什么也不用做,其他功能逐步添加,我们这里用的就是AWT中的Frame;
具体代码实现:
1 import java.awt.*; 2 3 public class ChatClient extends Frame{ 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 new ChatClient().launchFrame(); 10 } 11 12 /** 13 * Version 0.1 14 */ 15 public void launchFrame(){ 16 //设置Frame位置 17 setLocation(400, 300); 18 //设置Frame大小 19 this.setSize(300, 300); 20 //窗口可见 21 setVisible(true); 22 } 23 }
版本0.2
我们的需求是在我们的Frame中添加两个部件TextField(用于输入)和TextArea(用于显示获取的内容),此时我们可以在输入框输入内容,但是显示框无法显示我们输入的内容.
1 import java.awt.*; 2 3 public class ChatClient extends Frame { 4 5 TextField tfTxt = new TextField(); 6 TextArea taContent = new TextArea(); 7 8 public static void main(String[] args) { 9 new ChatClient().launchFrame(); 10 } 11 12 /** 13 * Version 0.2 14 */ 15 public void launchFrame() { 16 // 设置Frame位置 17 setLocation(400, 300); 18 // 设置Frame大小 19 this.setSize(300, 300); 20 // 将输入框TextField加到Frame中,并放置到Frame布局的上面 21 add(tfTxt, BorderLayout.SOUTH); 22 // 将显示框TextArea加到Frame中,并放置到Frame布局的下面 23 add(taContent, BorderLayout.NORTH); 24 // 调整布局,处理多余空白框 25 pack(); 26 // 窗口可见 27 setVisible(true); 28 } 29 }
版本0.3
因为我们的版本0.2中,显示的窗体无法关闭(除非把程序停掉,我们这里不考虑这种做法),我们添加窗口监听,使我们可以通过点击窗体的(X)符号进行关闭;
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class ChatClient extends Frame { 5 6 TextField tfTxt = new TextField(); 7 TextArea taContent = new TextArea(); 8 9 public static void main(String[] args) { 10 new ChatClient().launchFrame(); 11 } 12 13 /** 14 * Version 0.3:添加窗口关闭的功能 15 */ 16 public void launchFrame() { 17 // 设置Frame位置 18 setLocation(400, 300); 19 // 设置Frame大小 20 this.setSize(300, 300); 21 // 将输入框TextField加到Frame中,并放置到Frame布局的上面 22 add(tfTxt, BorderLayout.SOUTH); 23 // 将显示框TextArea加到Frame中,并放置到Frame布局的下面 24 add(taContent, BorderLayout.NORTH); 25 // 调整布局,处理多余空白框 26 pack(); 27 //添加窗口监听 28 this.addWindowListener(new WindowAdapter() { 29 30 @Override 31 public void windowClosing(WindowEvent e) { 32 System.exit(0); 33 } 34 }); 35 36 // 窗口可见 37 setVisible(true); 38 } 39 }
版本0.4
我们实现的功能是将输入框输入的内容显示到显示框TextArea中,
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class ChatClient extends Frame { 5 6 TextField tfTxt = new TextField(); 7 TextArea taContent = new TextArea(); 8 9 public static void main(String[] args) { 10 new ChatClient().launchFrame(); 11 } 12 13 /** 14 * Version 0.4 15 */ 16 public void launchFrame() { 17 // 设置Frame位置 18 setLocation(400, 300); 19 // 设置Frame大小 20 this.setSize(300, 300); 21 // 将输入框TextField加到Frame中,并放置到Frame布局的上面 22 add(tfTxt, BorderLayout.SOUTH); 23 // 将显示框TextArea加到Frame中,并放置到Frame布局的下面 24 add(taContent, BorderLayout.NORTH); 25 // 调整布局,处理多余空白框 26 pack(); 27 // 添加窗口监听 28 this.addWindowListener(new WindowAdapter() { 29 30 @Override 31 public void windowClosing(WindowEvent e) { 32 System.exit(0); 33 } 34 }); 35 36 // 将监听器类TFListener添加到输入框TextField中 37 tfTxt.addActionListener(new TFListener()); 38 // 窗口可见 39 setVisible(true); 40 } 41 42 // 建立私有的监听器类,TextField监听:将TextField内容放置到TextArea 43 private class TFListener implements ActionListener { 44 45 @Override 46 public void actionPerformed(ActionEvent e) { 47 //获得输入框的内容,并去除两端的空格 48 String s = tfTxt.getText().trim(); 49 //将获取的输入内容放置到TextArea中 50 taContent.setText(s); 51 //每次输入结束,将输入框置空 52 tfTxt.setText(""); 53 } 54 } 55 }
版本0.5
相比版本0.4,我们添加了Server端,使得Server作为中转站,把我们输入的内容显示在其他连接到Server端的客户端的的显示框中;
ChatClient
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class ChatClient extends Frame { 5 6 TextField tfTxt = new TextField(); 7 TextArea taContent = new TextArea(); 8 9 public static void main(String[] args) { 10 new ChatClient().launchFrame(); 11 } 12 13 /** 14 * Version 0.5:处理输入框 15 */ 16 public void launchFrame() { 17 // 设置Frame位置 18 setLocation(400, 300); 19 // 设置Frame大小 20 this.setSize(300, 300); 21 // 将输入框TextField加到Frame中,并放置到Frame布局的上面 22 add(tfTxt, BorderLayout.SOUTH); 23 // 将显示框TextArea加到Frame中,并放置到Frame布局的下面 24 add(taContent, BorderLayout.NORTH); 25 // 调整布局,处理多余空白框 26 pack(); 27 // 添加窗口监听 28 this.addWindowListener(new WindowAdapter() { 29 30 @Override 31 public void windowClosing(WindowEvent e) { 32 System.exit(0); 33 } 34 }); 35 36 // 将监听器类TFListener添加到输入框TextField中 37 tfTxt.addActionListener(new TFListener()); 38 // 窗口可见 39 setVisible(true); 40 } 41 42 // 建立私有的监听器类,TextField监听:将TextField内容放置到TextArea 43 private class TFListener implements ActionListener { 44 45 @Override 46 public void actionPerformed(ActionEvent e) { 47 // 获得输入框的内容,并去除两端的空格 48 String s = tfTxt.getText().trim(); 49 // 将获取的输入内容放置到TextArea中 50 taContent.setText(s); 51 // 每次输入结束,将输入框置空 52 tfTxt.setText(""); 53 } 54 } 55 }