《Java基礎 聊天窗口案例:剖析 GUI、文件 I/O 等關鍵技術知識》

1. 面向對象編程

  • 類與對象:代碼中定義了 Chat 類,它是整個程序的核心,封裝了與聊天窗口相關的屬性和方法。在 main 方法中創建了 Chat 類的對象,并調用其方法來完成相應的功能。
  • 繼承與多態ButtonClickListener 類實現了 ActionListener 接口,這是一種多態的體現。通過實現接口,ButtonClickListener 類可以作為 ActionListener 類型來使用,使得按鈕能夠注冊該監聽器以處理點擊事件。
  • 內部類ButtonClickListenerChat 類的內部類,它可以直接訪問外部類 Chat 的成員變量和方法,這有助于代碼的組織和封裝,同時也能方便地處理與外部類相關的事件。

2. 圖形用戶界面(GUI)編程

  • Swing 庫:代碼使用了 Java 的 Swing 庫來創建圖形用戶界面。JFrame 用于創建窗口,JButton 用于創建按鈕,JTextArea 用于創建文本區域。這些組件都是 Swing 庫提供的,通過組合它們可以構建出豐富的 GUI 界面。
  • 布局管理器:使用 FlowLayout 作為窗口的布局管理器,它會按照組件添加的順序從左到右、從上到下排列組件,這是一種簡單且常用的布局方式。
  • 事件處理:通過實現 ActionListener 接口,為按鈕添加點擊事件監聽器。當用戶點擊按鈕時,會觸發 actionPerformed 方法,在該方法中可以編寫相應的處理邏輯,如發送消息、保存文件和關閉窗口等。

3. 文件操作

  • 文件類:使用 File 類來表示文件和目錄,通過 File 對象可以對文件進行創建、刪除、重命名等操作。在代碼中,使用 File 類創建了一個表示 job\\out.txt 文件的對象。
  • 文件輸出流FileOutputStream 用于將數據寫入文件。代碼中使用 FileOutputStream 將聊天記錄文本內容寫入到指定的文件中,涉及到字節流的操作,需要將字符串轉換為字節數組后再寫入文件。

4. 異常處理

  • try-catch:在代碼中使用了 try-catch 塊來捕獲和處理可能出現的異常。例如,在 initChatWindow 方法中捕獲 IOException,以處理文件操作可能出現的輸入輸出異常;在 saveTextToFile 方法中也捕獲了 IOException,確保在文件寫入過程中出現異常時程序不會崩潰,并打印異常信息方便調試。

5. 基本數據類型和字符串處理

  • 字符串操作:在處理聊天記錄和輸入內容時,使用了字符串類型。例如,通過 getText 方法從 JTextArea 中獲取文本內容,使用 append 方法將文本追加到 JTextArea 中,還將字符串轉換為字節數組以便寫入文件。

6. 靜態方法和入口點

  • main 方法main 方法是 Java 程序的入口點,程序從這里開始執行。它是一個靜態方法,不需要創建對象就可以直接調用,通常用于初始化程序和調用其他方法。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;/*** 這是一個簡單的聊天窗口程序,使用 Java 的 Swing 庫創建圖形用戶界面。* 該程序包含一個聊天窗口,用戶可以在輸入框輸入內容,點擊發送按鈕將內容添加到聊天記錄中,* 點擊關閉按鈕會將聊天記錄保存到文件并關閉程序。*/
public class Chat {/*** 程序的入口點,創建 Chat 類的實例并調用初始化聊天窗口的方法。* @param args 命令行參數,在本程序中未使用。*/public static void main(String[] args) {try {// 創建 Chat 類的實例并調用初始化聊天窗口的方法new Chat().initChatWindow();} catch (IOException e) {// 捕獲并打印可能出現的輸入輸出異常e.printStackTrace();}}// 定義聊天窗口,使用 JFrame 類創建一個可視化窗口JFrame chatWindow = new JFrame("QQ");// 定義發送按鈕,點擊該按鈕可將輸入的內容添加到聊天記錄中JButton sendButton = new JButton("發送");// 定義關閉按鈕,點擊該按鈕會將聊天記錄保存到文件并關閉程序JButton closeButton = new JButton("關閉");// 定義顯示聊天記錄的文本區域,用戶發送的內容會顯示在這里JTextArea chatHistoryTextArea = new JTextArea(10, 35);// 定義輸入聊天內容的文本區域,用戶可以在此輸入要發送的信息JTextArea inputTextArea = new JTextArea(5, 35);/*** 初始化聊天窗口界面,設置窗口大小、布局,添加組件并設置可見性。* @throws IOException 如果在操作文件時發生輸入輸出異常。*/public void initChatWindow() throws IOException {// 設置聊天窗口的大小為 400x480 像素chatWindow.setSize(400, 480);// 設置窗口的布局管理器為 FlowLayout,組件按從左到右、從上到下的順序排列chatWindow.setLayout(new FlowLayout());// 設置顯示聊天記錄的文本區域背景顏色為綠色chatHistoryTextArea.setBackground(Color.GREEN);// 設置輸入聊天內容的文本區域背景顏色為淺灰色inputTextArea.setBackground(Color.lightGray);// 為發送按鈕添加點擊事件監聽器,當按鈕被點擊時會觸發相應的操作sendButton.addActionListener(new ButtonClickListener());// 為關閉按鈕添加點擊事件監聽器,當按鈕被點擊時會觸發相應的操作closeButton.addActionListener(new ButtonClickListener());// 將顯示聊天記錄的文本區域添加到聊天窗口中chatWindow.add(chatHistoryTextArea);// 將輸入聊天內容的文本區域添加到聊天窗口中chatWindow.add(inputTextArea);// 將發送按鈕添加到聊天窗口中chatWindow.add(sendButton);// 將關閉按鈕添加到聊天窗口中chatWindow.add(closeButton);// 設置窗口大小不可調整chatWindow.setResizable(false);// 設置窗口可見,使窗口顯示在屏幕上chatWindow.setVisible(true);}/*** 將指定的文本內容保存到文件中。* @param textToSave 要保存到文件的文本內容。*/public void saveTextToFile(String textToSave) {try {// 創建一個文件對象,指定文件路徑為 job\\out.txtFile outputFile = new File("job\\out.txt");// 創建一個文件輸出流,用于將數據寫入到指定文件中FileOutputStream fileOutputStream = new FileOutputStream(outputFile);// 將文本內容轉換為字節數組并寫入到文件輸出流中fileOutputStream.write(textToSave.getBytes());// 刷新文件輸出流,確保所有緩沖的數據都被寫入到文件中fileOutputStream.flush();// 關閉文件輸出流,釋放相關資源fileOutputStream.close();} catch (IOException e) {// 捕獲并打印可能出現的輸入輸出異常e.printStackTrace();}}/*** 按鈕點擊事件監聽器類,實現了 ActionListener 接口,用于處理按鈕的點擊事件。*/class ButtonClickListener implements ActionListener {/*** 處理按鈕點擊事件,根據點擊的按鈕執行相應的操作。* @param e 按鈕點擊事件對象,包含了事件的相關信息。*/public void actionPerformed(ActionEvent e) {// 打印調試信息System.out.println("hdj");// 判斷點擊的是否是發送按鈕if (e.getSource() == sendButton) {// 如果是發送按鈕,將輸入文本區域的內容追加到聊天記錄文本區域中chatHistoryTextArea.append(inputTextArea.getText());// 清空輸入文本區域,以便用戶輸入新的內容inputTextArea.setText("");}// 判斷點擊的是否是關閉按鈕if (e.getSource() == closeButton) {// 如果是關閉按鈕,調用保存文本到文件的方法,將聊天記錄保存到文件中saveTextToFile(chatHistoryTextArea.getText());// 退出程序,關閉整個應用程序System.exit(0);}}}
}

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

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

相關文章

IDE集成開發環境MyEclipse中安裝SVN

打開Myeclipse的help菜單----install from site 點擊add彈出對話框 在輸入框中輸入對應內容 http://subclipse.tigris.org/update_1.10.x 點擊OK之后,會刷新出兩個選項,需要選中的 點擊next,出現許可的時候選中同意,一直結束等…

歸并排序:分治哲學的完美演繹與時空平衡的藝術

引言:跨越世紀的算法明珠 在計算機科學的璀璨星河中,歸并排序猶如一顆恒久閃耀的明星。1945年,現代計算機之父馮諾伊曼在EDVAC計算機的研發過程中首次系統性地提出了這一算法,其精妙的分治思想不僅奠定了現代排序算法的理論基礎&…

服務器CPU微架構

1、微架構圖 前端:預解碼、解碼、分支預測、L1指令緩存、指令TLB緩存 后端:順序重排緩存器ROB處理依賴,調度器送到執行引擎 執行引擎:8路超標量,每一路可以進行獨立的微操作處理 Port0、1、5、6支持整數、浮點數的加…

SpringBoot調用DeepSeek

引入依賴 <dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>deepseek-spring-boot-starter</artifactId><version>1.4.5</version> </dependency>配置 deepseek:api-key: sk-******base-url: https://api.…

【前端基礎】Day 9 PC端品優購項目

目錄 1. 品優購項目規劃 1.1 網站制作流程 1.2 品優購項目整體介紹 1.3 學習目的 1.4 開發工具以及技術棧 1.5 項目搭建工作 1.6 網站favicon圖標 1.7 網站TDK三大標簽SEO優化 2. 品優購首頁制作 2.1 常見模塊類命名 2.2 快捷導航shortcut制作 2.3 header制作 2.4…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的簡要步驟。移植描述過程中&#xff0c;忽略了Keil軟件的部分使用技巧。默認讀者熟練使用Keil軟件。本文的描述是基于OpenMCU_FreeRTOS這個工程&#xff0c;該工程已經下載放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo創建一個基于CIFLog平臺的應用系統1. 下載安裝CIFLog2. 授權使用3. 解決本地機器碼驗證錯誤問題4. 創建一個基于CIFLog平臺的應用系統&#xff08;1&#xff09;新建項目&#xf…

ESP8266連接網絡實時上傳數據

要實現這個功能,可以按照以下步驟進行編程。我們將使用Arduino IDE來編寫代碼,并結合ESP8266的WiFi庫、MQTT庫以及Web服務器庫來實現。 1. 準備工作 硬件:ESP8266開發板、溫度傳感器(如DS18B20)、顯示屏(如OLED)。軟件:Arduino IDE、ESP8266庫、PubSubClient庫(MQTT)…

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 測試框架的配置文件,它允許你自定義 pytest 的行為。通過在 pytest.ini 中設置各種選項,可以改變測試用例的發現規則、輸出格式、插件行為等。以下詳細介紹 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于項目的根目錄下,pytest 在運…

MARL零樣本協調之Fictitious Co-Play學習筆記

下列引用來自知乎作者Algernon 知乎link FCP作為ZSC領域兩階段訓練方法的開創者 論文《Collaborating with Humans without Human Data》來自 NeurIPS 2021。這篇論文提出 Fictitious Co-Play (FCP) 來解決 ZSC 問題。論文認為&#xff0c;ZSC 的第一個重要問題是對稱性&#x…

Docker小游戲 | 使用Docker部署DOS游戲合集

Docker小游戲 | 使用Docker部署DOS游戲合集 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署dos-games網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口檢查容器日志安全設置四、訪問DOS游戲網頁五、進階玩法下載游戲拷貝…

SpringBoot-模擬SSE對話交互

SpringBoot-模擬SSE對話交互 后端使用SSE進行會話&#xff0c;前端使用Html模擬大模型的問答交互->【前端】【后端】 1-學習目的 本項目代碼倉庫&#xff1a;https://gitee.com/enzoism/springboot_sse 1-核心知識點 1&#xff09;什么是SSE協議->客戶端發起一次請求&am…

2025 ubuntu24.04系統安裝docker

1.查看ubuntu版本&#xff08;Ubuntu 24.04 LTS&#xff09; rootmaster:~# cat /etc/os-release PRETTY_NAME"Ubuntu 24.04 LTS" NAME"Ubuntu" VERSION_ID"24.04" VERSION"24.04 LTS (Noble Numbat)" VERSION_CODENAMEnoble IDubun…

Avalonia 中文亂碼

代碼字體文件設置成支持中文的&#xff0c;但是編譯的代碼還是顯示的亂碼&#xff0c;原因是代碼文件的文件編碼格式不支持中文導致的。 如下面的2個頁面一部分中文顯示正常&#xff0c;一部分顯示正常&#xff0c;一部分顯示亂碼。

國產編輯器EverEdit - 工具欄自定義及認識工具欄上的按鈕

1 設置-高級-工具條 1.1 設置說明 1.1.1 工具條自定義 選擇主菜單工具 -> 設置 -> 常規&#xff0c;在彈出的選項窗口中選擇工具條分類&#xff0c;如下圖所示&#xff1a; 左側窗口是當前支持所有功能按鈕列表(上圖中居中欄)&#xff0c;右側的窗口是當前顯示在工具欄…

淘寶商品詳情高級版API接口測試與數據處理指南

在電商數據分析、商品監控和自動化運營中&#xff0c;淘寶商品詳情API接口是不可或缺的工具之一。本文將詳細介紹如何測試淘寶商品詳情高級版API接口的返回數據&#xff0c;并提供完整的數據處理流程&#xff0c;幫助開發者高效利用接口數據。 一、淘寶商品詳情API接口概述 淘…

C++海康相機DEMO

非標設備經常用到相機算法&#xff0c;利用工作之余時間&#xff0c;結合海康相機demo寫一套全面的相機應用&#xff0c;圖像處理常用的有halcon 、 opencv &#xff0c; MIL &#xff0c; visionpro&#xff0c;這里采用目前比較常用的halcon和opencv對相機圖片算法處理。整個…

TMS320F28P550SJ9學習筆記2:Sysconfig 配置與點亮LED

今日學習使用Sysconfig 對引腳進行配置&#xff0c;并點亮開發板上的LED4 與LED5 我的單片機開發板平臺是 LAUNCHXL_F28P55x 我是在上文描述的驅動庫C2000ware官方例程example的工程基礎之上進行添加功能的 該例程路徑如下&#xff1a;D:\C2000Ware_5_04_00_00\driverlib\f28p…

人機交互革命:從觸屏到腦波的13維戰爭

人機交互革命&#xff1a;從觸屏到腦波的13維戰爭 一、交互維度大爆炸&#xff1a;重新定義人機溝通邊界 當ChatGPT開始解析你的微表情&#xff0c;當Neuralink芯片能讀取皮層信號&#xff0c;人機交互已突破【鍵鼠】的次元壁。我們正經歷人類史上最大規模的感官革命&#xff…

使用Qt調用HslCommunication(C++調用C#庫)

使用C/CLI 來調用C#的dll 任務分解&#xff1a; 1、實現C#封裝一個調用hsl的dll&#xff1b; 2、實現C控制臺調用C#的dll庫&#xff1b; 3、把調用C#的dll用C再封裝為一個dll&#xff1b; 4、最后再用Qt調用c的dll&#xff1b; 填坑&#xff1a; 1、開發時VS需要安裝CLI項目庫…