Java swing中的keyListener使用事例
最近在学习Java swing,写了一个域内聊天室,实现用户登录ip,端口号之后,进入聊天窗口聊天:

通过菜单条增加了几个功能,边框,字体,颜色和文件传输。风格里的样式都可以通过自己选择来设置。



介绍以上。
但在实现发送的功能时,想要增加默认回车发送消息功能:
原来的send按钮监听事件代码:
private class sendListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String str = editMsg.getText();
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
if(str.equals(" ") || str.equals("") || str==null){
JOptionPane.showMessageDialog(null, "输入不能为空,请重新输入!", "提示",JOptionPane.OK_OPTION);
}else{
dos.writeUTF(str);
}
dos.flush();
editMsg.setText("");
} catch (IOException e1) {
e1.printStackTrace();
}
}
中间的用户不可编辑的消息显示区,增加一个键盘监听事件:
editMsg.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent key1) {
return;
}
@Override
public void keyReleased(KeyEvent key2) {
int code = key2.getKeyCode();
if(code==10){
editMsg.setText("");
}
return;
}
@Override
public void keyPressed(KeyEvent key3) {
int code=key3.getKeyCode();
if(code==10){
String str = editMsg.getText();
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
if(str.equals(" ") || str.equals("") || str==null){
JOptionPane.showMessageDialog(null, "输入不能为空,请重新输入", "提示",JOptionPane.OK_OPTION);
}else{
dos.writeUTF(str);
}
dos.flush();
editMsg.setText("");
} catch (IOException e1) {
e1.printStackTrace();
}
}
return;
}
});
keyTyped为按键敲击事件,keyReleased为按键按下之后释放时的方法,keyPressed为按钮按下之后,释放之前的方法。
在keyPRessed方法中,每按一次按键时,先获取keyCode编码,确定回车的ASCII码值,再来判断是否发送消息。
思路是正确的,但在此出现了一个问题,每次回车发送消息之后,会有一个自动换行的操作,这也导致判断消息为空的代码失效。
解决办法:在keyReleased的方法中同样再判断一次回车的ASCII码值,再次清空输入框,问题得到解决。
总结:在键盘的监听中,主要通过判断按键的执行顺序以及按键的ASCII值来采取对应操作。
Java swing中的keyListener使用事例的更多相关文章
- java swing中Timer类的学习
最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...
- java swing 中的FileDialog
1.FileDialog使用方法: FileDialog fd=new FileDialog(new Frame(),"测试",FileDialog.LOAD); Filenam ...
- Java Swing 中使用 EventQueue
public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { ...
- JAVA swing中JPanel如何实现分组框的效果以及设置边框颜色 分类: Java Game 2014-08-16 12:21 198人阅读 评论(0) 收藏
代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import javax.sw ...
- substance在java swing中使用注意事项
package org.dgw.uidemo; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.UI ...
- java swing 中JTable实现指定单元格为下拉框
利用自定义的CellEditor实现第四列第二行为下拉框,本列其余行为文本框 利用默认的DefaultCellEditor设置第五列整列为下拉框 package mypackage; import ...
- Java Swing中Substance常用皮肤
AutumnSkin; BusinessSkin; BusinessBlackSteelSkin; BusinessBlueSteelSkin; ChallengerDeepSkin; CremeSk ...
- Java Swing中Substance个人比较喜欢的两种组合
try { // 设置外形装饰为可装饰 JFrame.setDefaultLookAndFeelDecorated(true); // 设置外观 UIManager.setLookAndFeel(ne ...
- Java swing: 实现ActionListener监听器的三种途径
Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的 强大工具.Java Swing组件自动产生各种事件来响应用户行为.如当用户点击按钮或选择菜单项目时,Swing ...
随机推荐
- hdu 4678 Mine
HDU 4678 把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏 中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子. 那么就可以看成一个组合游戏. 当空地旁边没连任何数 ...
- LibreOJ 6279 数列分块入门 3(分块+排序)
题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x ...
- delphi 金额大小写转换函数
{*------------------------------------------------ 金额大小写转换函数 @author 王云盼 @version V1506.01 在delphi7测 ...
- 新的云主机 python 创建虚拟环境
1.为什么要搭建虚拟环境? 问题:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无 ...
- WPF中在摄像头视频上叠加控件的解决方案
一.视频呈现 前段时间,在一个wpf的项目中需要实时显示ip摄像头,对此的解决方案想必大家都应该知道很多.在winform中,我们可以将一个控件(一般用panel或者pictruebox)的句柄丢给摄 ...
- 上课总结-模电chapter 2
1.无明显失真时电压放大倍数——输出与输入电压的变化量之比 .无明显失真时 电流放大倍数——输出与输入电流的变化量之比 3.最大输出幅度 ①无明显失真时最大输出电压(或最大输出电流) ②交流有效值(U ...
- 使用sshkey,禁用密码登陆,以及git仓库的搭建
使用sshkey,可以实现免密码登陆服务器,同时关闭ssh service的使用账号密码登陆功能即可 1.首先在客户机添加sshkey(如果是window系统的话需要安装shell终端工具,例如xsh ...
- 查看linux操作系统的版本等信息
1.查看操作系统是32位还是64位的命令: (1)getconf LONG_BIT (2)uname -a (3)uname -m (4)arch (5)file /sbin/init 2.查看操作系 ...
- SignalR-001
SignalR 是什么? ASP.NET Core SignalR 是一个开放源代码库,它简化了向应用添加实时 web 功能. 实时 web 功能立即使服务器端代码能够将内容推送到客户端. 一.有这么 ...
- vue模块拖拽效果
正巧在之前面试中遇到问实现拖拽效果 当时面试的时候简单回答了实现的方式与逻辑. 现在闲来无事,把这个东西实现了一下. 原理很简单,写的很方便. 数据驱动,建立一个数组,数组初始长度为1 拖动触发时,添 ...