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值來采取對應操作。

轉載于:https://www.cnblogs.com/Jery-9527/p/9749448.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396609.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396609.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「前端」History API與瀏覽器歷史堆棧管理

本文由尚妝前端開發工程師欲休撰寫 本文發表于尚妝博客,歡迎訂閱! 移動端開發在某些場景中有著特殊需求,如為了提高用戶體驗和加快響應速度,常常在部分工程采用SPA架構。傳統的單頁應用基于url的hash值進行路由,這種實…

Andrew Ng機器學習(一):線性回歸

1.什么是線性回歸? 用線性關系去擬合輸入和輸出。 設輸入為x,則輸出yaxb。 對于多元的情況yb1a1x1a2x2...anxn。 用θ表示系數,可以寫作: 其中,x01。 2.線性回歸有什么用? 對于連續輸入和輸出的問題&#x…

c++虛析構函數

1.為什么基類的析構函數是虛函數&#xff1f; 在實現多態時&#xff0c;當用基類操作派生類&#xff0c;在析構時防止只析構基類而不析構派生類的狀況發生。 下面轉自網絡&#xff1a;源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代碼 #include<i…

ICMP(Internet Control Message Protocol)網際控制報文協議初識

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制報文協議。它是TCP/IP協議族的一個子協議&#xff0c;用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用…

Linux設置RSA密鑰登錄

一、怎么實現雙向免密登錄 前提 所有服務器/etc/ssh/sshd_config文件的以下三行未被注釋 RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys舉例&#xff1a; 兩臺服務器&#xff1a;192.168.100.134 192.168.1.140免密碼登錄是分用戶的…

python面向對象__str__和__repr__方法

__str__方法 class Animal:def __init__(self,name,color):self.namenameself.colorcolordef __str__(self):resself.name的顏色是self.colorreturn res batAnimal(蝙蝠,黑色) print(蝙蝠的特征:%s % bat) # 蝙蝠的特征:蝙蝠的顏色是黑色 對象輸出或者打印就會執行__str__方法…

函數sprintf真好用

描述&#xff1a;C 庫函數 int sprintf(char *str, const char *format, ...) 發送格式化輸出到 str 所指向的字符串。 聲明&#xff1a; int sprintf(char *str, const char *format, ...) 參數&#xff1a; str -- 這是指向一個字符數組的指針&#xff0c;該數組存儲了 C 字符…

oracle 刪除主鍵_大數據量刪除的思考 4

譯者 湯健 沃趣科技數據庫技術專家出品 沃趣科技在本系列的前一期文章中&#xff0c;我制作了一些圖&#xff0c;突出顯示了按表掃描執行大量刪除操作和按索引范圍掃描執行大量刪除之間的主要區別。根據所涉及的數據模式&#xff0c;選擇正確的策略可能對隨機I/Os的數量、生…

redis 持久化 + 主從復制+ 集群

2019獨角獸企業重金招聘Python工程師標準>>> 一、 Linux 下的 Redis 安裝 && 啟動 && 關閉 && 卸載 http://blog.csdn.net/zgf19930504/article/details/51850594 注&#xff1a;設置 redis.conf bind***.***.*.(127.0.0.1) redis啟動&…

怎么運行c語言_C語言 原來是這樣調用硬件的

大家都知道我們可以使用C語言寫一段程序來控制硬件工作&#xff0c;但你知道其工作原理嗎&#xff1f;網友北極C語言在實際運行中&#xff0c;都是以匯編指令的方式運行的&#xff0c;由編譯器把C語言編譯成匯編指令&#xff0c;CPU直接執行匯編指令。所以這個問題就變成&#…

四、元祖、字典

一、元祖(tuple)&#xff1a;tu(11,"hello",(0,1),[11,"111"],33,) 元祖的特點&#xff1a;元祖中一級元素不可被修改&#xff0c;不能被增加或刪除&#xff0c;多級元素可以被修改&#xff0c;一般寫元祖的時候&#xff0c;推薦在后面添加逗號“&#xff…

PHP編程效率的20個要點

用單引號代替雙引號來包含字符串&#xff0c;這樣做會更快一些。因為PHP會在雙引號包圍的字符串中搜尋變量&#xff0c;單引號則 不會&#xff0c;注意&#xff1a;只有echo能這么做&#xff0c;它是一種可以把多個字符串當作參數的“函數”(譯注&#xff1a;PHP手冊中說echo是…

ubuntu運行python ide_打造vim中的python IDE

首先先介紹幾個常用的插件&#xff1a;1&#xff0c;ctags和taglist&#xff0c;這個大家估計都很常用&#xff0c;在ubuntu下只要安裝exuberant-ctags即可啦&#xff0c;另外tagbar支持面向對象語言的展示" toggle Tagbar displaymap :TagbarToggle" autofocus on T…

更新和插入的并發問題_mysql經典面試題:如何讀寫分離?主從原理是啥?同步的延時問題...

面試題你有沒有做 MySQL 讀寫分離&#xff1f;如何實現 MySQL 的讀寫分離&#xff1f;MySQL 主從復制原理的是啥&#xff1f;如何解決 MySQL 主從同步的延時問題&#xff1f;考點分析高并發這個階段&#xff0c;肯定是需要做讀寫分離的&#xff0c;啥意思&#xff1f;因為實際上…

php實現一個簡單的四則運算計算器

php實現一個簡單的四則運算計算器&#xff08;還不支持括號的優先級&#xff09;。利用棧這種數據結構來計算表達式很贊。 這里可以使用棧的結構&#xff0c;由于php的數組“天然”就有棧的特性&#xff0c;這里直接就利用了數組。當然可以使用棧結構寫&#xff0c;道理一樣的。…

Tcp與Ip協議的客戶端和服務器編程

Tcp與Ip協議的客戶端和服務器編程 本文就TCP和Ip協議的客戶端和服務器分別進行編程&#xff0c;實現了客戶端和服務端進行通信的功能&#xff0c;服務端對多個客戶端進行監聽&#xff0c;并能與多個客戶端通信。 服務器端代碼如下&#xff1a; using System; using System.Coll…

maven建立webapp項目時顯示Cannot change version of project facet Dynamic web module to 2.5

為什么80%的碼農都做不了架構師&#xff1f;>>> 網上查了很多東西都沒啥用&#xff0c;其實直接把這段代碼加到web.xml頭部&#xff0c;自然就不報錯了 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.…

python數據結構算法 北京大學_北京大學公開課《數據結構與算法Python版》

之前我分享過一個數據結構與算法的課程&#xff0c;很多小伙伴私信我問有沒有Python版。看了一些公開課后&#xff0c;今天特向大家推薦北京大學的這門課程&#xff1a;《數據結構與算法Python版》。課程概述很多同學想要轉行機器學習&#xff0c;也確實掌握了一些機器學習模型…

20道C#練習題(一)1——10題

1.輸入三個整數&#xff0c;xyz&#xff0c;最終以從小到大的方式輸出。利用if嵌套。 Console.Write("請輸入x"); double x double.Parse(Console.ReadLine()); Console.Write("請輸入y"); double y double.Parse(Console.ReadLine()); Console.Write(&q…

fd 句柄_linux文件描述符fd(windows下的句柄)

在Linux系統中一切皆可以看成是文件&#xff0c;文件又可分為&#xff1a;普通文件、目錄文件、鏈接文件和設備文件fd&#xff1a;file descriptor文件描述符0,1,2分別給了標準輸入、標準輸出和錯誤輸出。ls -l /proc/pid/fd可以查看某個進程所使用的fd用lsof可以查看比如&…