zoukankan      html  css  js  c++  java
  • 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值来采取对应操作。

  • 相关阅读:
    岛田庄司《占星术杀人魔法》读后感
    OutputCache祥解
    ZOJ Monthly, June 2014 月赛BCDEFGH题题解
    接口和抽象类有什么差别
    C语言指针的初始化和赋值
    深入探讨this指针
    郁 繁体为“鬰” 古同 “鬱”
    socketpair的使用
    Android的FrameLayout使用要注意的问题
    下确界和上确界
  • 原文地址:https://www.cnblogs.com/Jery-9527/p/9749448.html
Copyright © 2011-2022 走看看