最近在学习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使用事例的更多相关文章

  1. java swing中Timer类的学习

    最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...

  2. java swing 中的FileDialog

    1.FileDialog使用方法: FileDialog fd=new FileDialog(new Frame(),"测试",FileDialog.LOAD);  Filenam ...

  3. Java Swing 中使用 EventQueue

    public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { ...

  4. 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 ...

  5. substance在java swing中使用注意事项

    package org.dgw.uidemo; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.UI ...

  6. java swing 中JTable实现指定单元格为下拉框

    利用自定义的CellEditor实现第四列第二行为下拉框,本列其余行为文本框 利用默认的DefaultCellEditor设置第五列整列为下拉框   package mypackage; import ...

  7. Java Swing中Substance常用皮肤

    AutumnSkin; BusinessSkin; BusinessBlackSteelSkin; BusinessBlueSteelSkin; ChallengerDeepSkin; CremeSk ...

  8. Java Swing中Substance个人比较喜欢的两种组合

    try { // 设置外形装饰为可装饰 JFrame.setDefaultLookAndFeelDecorated(true); // 设置外观 UIManager.setLookAndFeel(ne ...

  9. Java swing: 实现ActionListener监听器的三种途径

    Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的 强大工具.Java Swing组件自动产生各种事件来响应用户行为.如当用户点击按钮或选择菜单项目时,Swing ...

随机推荐

  1. lnmp+laravel部署到服务器出现 "GET / HTTP/1.1" 500 5

    lnmp一键安装包直接下载安装,就可以了,在此不多说. 虚拟机配置给个参考(lnmp安装包) server { listen 80; #listen [::]:80; server_name www. ...

  2. codefirst 关系处理

    1.http://www.cnblogs.com/libingql/archive/2013/01/31/2888201.html 2.多对多 protected override void OnMo ...

  3. 清除Vs2010的工作区影射关系的缓存信息的文件夹路径

    C:/Users/Administrator/AppData/Local/Microsoft/Team Foundation/3.0/Cache

  4. c#并发编程经典实例文摘

    第1章 并发编程概述 1.1 并发编程简介 并发: 多线程(包括并行处理) 异步编程(异步操作)程序启动一个操作,而该操作将会在一段时间后完成 响应时编程(异步事件)可以没有一个实际的开始,可以在任何 ...

  5. git之创建版本库

    好吧,你知道了git既然有这么多好处,那么我们接下来就可以使用git命令来创建我们的仓库.这一节我们来学习一下如何在windows下面建立自己的仓库.首先我们先在本地创建一个主目录,比如文件名字叫le ...

  6. android canvas中rotate()和translate()两个方法详解

    rotate()和translate() 1.看到这个题目的时候,有人会觉得这不就是一个对画布的旋转和平移的嘛,但是其中的细节的地方还是需要深究一下的. 例如:有个需求将TextView的文字竖直显示 ...

  7. 十三、Node.js-fs模块(上)

    Node.js内置的fs模块就是文件系统模块,负责读写文件以及对文件进行相关操作. 下面直接可参考下面的代码进行fs模块里面基本方法的学习: /** * Created by Administrato ...

  8. 20165219 2017-2018-2 《Java程序设计》第5周学习总结

    20165219 2017-2018-2 <Java程序设计>第5周学习总结 课本知识总结 第7章 内部类与异常类 一 1 内部类:类的一种成员 2 外嵌类:包含内部类的类称为内部类的外嵌 ...

  9. 拆半搜索binary_search

    //binary_search用于在有序的区间用拆半查找搜索等于某值得元素 #include<algorithm> #include<iostream> using names ...

  10. 转载 Adobe DreamweaverCS6安装及破解

    一:安装 百度链接:链接:http://pan.baidu.com/s/1dF8hTex 密码:zrew   (重点) 1) Adobe DreamweaverCS6中文版下载 2)Adobe Dre ...