java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余
package com.swift; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class ChatClientFrame extends JFrame { private static final long serialVersionUID = -118470059355655240L;
JLabel label_shang=new JLabel();
JLabel label_xia=new JLabel();
JTextArea ta = new JTextArea(15, 50);
JTextField tf = new JTextField(38);
JButton button=new JButton(); public ChatClientFrame() {
setBounds(200, 200, 500, 400);
setTitle("客户端聊天工具 —— 0.2");
//对窗口进行大的布局,分为三行一列,在pBasic面板上添加三个面板shang zhong xia
JPanel pBasic=new JPanel();
//使用网格布局当然是上中下一样大小的啊,果断放弃
//pBasic.setLayout(new GridLayout(3,1,5,5));
//使用BorderLayout
pBasic.setLayout(new BorderLayout());//不设置默认也是这种布局模式
setContentPane(pBasic);//把面板放在窗口上,不记得用this.关键字
JPanel shang=new JPanel();
JPanel zhong=new JPanel();
JPanel xia=new JPanel();
//设置JPanel面板的大小
shang.setSize(470, 25);
zhong.setSize(470, 180);
xia.setSize(470, 40);
pBasic.add(shang,BorderLayout.NORTH);
pBasic.add(zhong,BorderLayout.CENTER);
pBasic.add(xia,BorderLayout.SOUTH);
shang.setBackground(Color.red);
zhong.setBackground(Color.yellow);
xia.setBackground(Color.blue);
/*
* 三个面板,上边放一个标签“聊天记录”,中间放一个文本域,
* 下边分为左中右——分别放标签“输入信息“,文本框和”发送“按钮
*/
label_shang.setText("聊天记录");
shang.add(label_shang);
ta.setLineWrap(true);// 自动换行
JScrollPane scroll=new JScrollPane(ta);// 增加滚动条,以便不增加行数
zhong.add(scroll);
label_xia.setText("输入信息");
xia.add(label_xia,BorderLayout.WEST);
xia.add(tf,BorderLayout.CENTER);
button.setText("发送");
xia.add(button,BorderLayout.EAST); /*
* 增加“发送”按钮的功能,当点击按钮则tf中的内容添加进ta文本区中
*/
button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
String taText=ta.getText();
String tfText=tf.getText()+"\r\n";
ta.setText(taText+tfText);
tf.setText("");
}
});
/*
* 增加回车的功能,则tf中的内容添加进ta文本区中
* 不用key的listener,一按键就发送了
* 和button的监听一样用actionListener就可以监听回车
*/
tf.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
String taText=ta.getText();
String tfText=tf.getText()+"\r\n";
ta.setText(taText+tfText);
tf.setText("");
}
}); //通过压缩自动调整各个面板
pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 点关闭按钮同时退出程序
setVisible(true);
} public static void main(String[] args) {
// 别忘了创建窗体对象,也可以用生成对象调用其他的方法如launchFrame()
new ChatClientFrame();
} }
方法二,使用内部类方法
package com.swift; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class ChatClientFrame2 extends JFrame { private static final long serialVersionUID = -118470059355655240L;
JLabel label_shang=new JLabel();
JLabel label_xia=new JLabel();
JTextArea ta = new JTextArea(15, 50);
JTextField tf = new JTextField(38);
JButton button=new JButton(); public ChatClientFrame2() {
setBounds(200, 200, 500, 400);
setTitle("客户端聊天工具 —— 0.2");
//对窗口进行大的布局,分为三行一列,在pBasic面板上添加三个面板shang zhong xia
JPanel pBasic=new JPanel();
pBasic.setLayout(new BorderLayout());//不设置默认也是这种布局模式
setContentPane(pBasic);//把面板放在窗口上,不记得用this.关键字
JPanel shang=new JPanel();
JPanel zhong=new JPanel();
JPanel xia=new JPanel();
//设置JPanel面板的大小
shang.setSize(470, 25);
zhong.setSize(470, 180);
xia.setSize(470, 40);
pBasic.add(shang,BorderLayout.NORTH);
pBasic.add(zhong,BorderLayout.CENTER);
pBasic.add(xia,BorderLayout.SOUTH);
shang.setBackground(Color.red);
zhong.setBackground(Color.yellow);
xia.setBackground(Color.blue);
/*
* 三个面板,上边放一个标签“聊天记录”,中间放一个文本域,
* 下边分为左中右——分别放标签“输入信息“,文本框和”发送“按钮
*/
label_shang.setText("聊天记录");
shang.add(label_shang);
ta.setLineWrap(true);// 自动换行
JScrollPane scroll=new JScrollPane(ta);// 增加滚动条,以便不增加行数
zhong.add(scroll);
label_xia.setText("输入信息");
xia.add(label_xia,BorderLayout.WEST);
xia.add(tf,BorderLayout.CENTER);
button.setText("发送");
xia.add(button,BorderLayout.EAST);
/*
* 增加“发送”按钮的功能,增加回车的功能,监听相同,
* 则使用内部类实现,以提高代码复用性
*/
final class ShareListener implements ActionListener{ @Override
public void actionPerformed(ActionEvent e) {
String taText=ta.getText();
String tfText=tf.getText()+"\r\n";
ta.setText(taText+tfText);
tf.setText("");
}
}
button.addActionListener(new ShareListener());
tf.addActionListener(new ShareListener());
//通过压缩自动调整各个面板
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 点关闭按钮同时退出程序
setVisible(true);
} public static void main(String[] args) {
// 别忘了创建窗体对象,也可以用生成对象调用其他的方法如launchFrame()
new ChatClientFrame2();
} }
效果图如下:

java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)的更多相关文章
- java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小
代码如下: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JBu ...
- java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)
建立Chat项目,并在项目中创建窗口类 package com.swift; import java.awt.BorderLayout; import javax.swing.JFrame; impo ...
- java在线聊天项目0.4版本 制作服务端接收连接,客户端连接功能 新增客户端窗口打开时光标指向下边文本域功能,使用WindowListener监听WindowAdapter
建一个服务端类ChatServer,用于设置端口接收连接 package com.swift; import java.io.IOException; import java.net.ServerSo ...
- java在线聊天项目0.6版 解决客户端关闭后异常问题 dis.readUTF()循环读取已关闭的socket
服务端对try catch finally重新进行了定义,当发生异常,主动提示,或关闭出现异常的socket 服务器端代码修改如下: package com.swift; import java.io ...
- java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
没有解决问题之前客户端代码: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.a ...
- java在线聊天项目0.9版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能之客户端接收
客户端要不断接收服务端发来的信息 与服务端不断接收客户端发来信息相同,使用线程的方法,在线程中循环接收 客户端修改后代码如下: package com.swift; import java.awt.B ...
- java在线聊天项目0.7版 连接多个客户端问题,开启多个客户端后服务器端只接收到一个 对各种异常的补充处理
问题的原因是 while(connected) { String str=dis.readUTF(); System.out.println(str); } 不断循环执行,一直在死循环获取socket ...
- java在线聊天项目0.8版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能
迭代器的方式会产生锁定 服务器端增加发送给每个客户端已收到信息的功能 所以当获取到一个socket,并打开它的线程进行循环接收客户端发来信息时,我们把这个内部类的线程Client保存到集合List&l ...
- java在线聊天项目 使用SWT快速制作登录窗口,可视化窗口Design 更换窗口默认皮肤(切换Swing自带的几种皮肤如矩形带圆角)
SWT成功激活后 new一个JDialog 调整到Design视图 默认的视图模式是BorderLayout,无论你怎么拖拽,只能放到东西南北中的位置上 所以,我们把视图模式调整为AbsoluteLa ...
随机推荐
- css 3d旋转
- uoj#276. 【清华集训2016】汽水(分数规划+点分治)
传送门 没想到点分治那一层-- 首先不难发现这是个分数规划,先把所有的边长减去\(k\),二分答案,设为\(mid\),就是要求路径平均值\(ans\in[-mid,mid]\) 先来考虑\(ans\ ...
- Mybatis源码解读-设计模式总结
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybatis至少 ...
- 笔记-JavaWeb学习之旅8
Window对象-定时器方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- rn-splash-screen 启动页 ios
1.删除iOS工程文件夹下的 LaunchScreen.xib 文件 2. 3. 如果第4步不一样的样式,可以重新走这个图片的步骤就行 4.进入iOS工程的AppDelegate.m中做如下修改: ...
- H - String painter
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- python文件实现增删改查操作
# coding = utf-8 import os import json import re ''' 本程序旨在将练习基础知识部分,包括: 列表,元组,字典,文件,函数,字符串等知识 实现的功能: ...
- [题解](tarjan割点/点双)luogu_P3225_矿场搭建
首先和割点有关,求割点,然后这些割点应该把这个图分成了多个点双,可以考虑点双的缩点,假如缩点做的话我们要分析每个点双的性质和贡献 先拿出一个点双来,如果它没有连接着割点,那么至少要建两个,以防止其中一 ...
- flask_context
定义全局的钩子函数 有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子 例如在请求之前创建数据库连接或者redis连接:或者是系统里面用户请求处理之前先验证用户的身份,是否 ...
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) B
Description Kostya likes Codeforces contests very much. However, he is very disappointed that his so ...