Java開發筆記(一百二十八)Swing的圖標

来源:https://www.cnblogs.com/pinlantu/archive/2019/07/24/11240944.html
-Advertisement-
Play Games

前面提過,AWT沒提供能夠直接顯示圖像的控制項,這無疑是個令人詬病的短板,因為一上來就得由程式員自己去定義新控制項,對於初學者來講很不友好。這個問題在Swing中也解決掉了,不過Swing並未提供單獨的圖像視圖,而是利用標簽控制項JLabel來顯示圖像。JLabel的setText方法用來設置標簽上的文本 ...


前面提過,AWT沒提供能夠直接顯示圖像的控制項,這無疑是個令人詬病的短板,因為一上來就得由程式員自己去定義新控制項,對於初學者來講很不友好。這個問題在Swing中也解決掉了,不過Swing並未提供單獨的圖像視圖,而是利用標簽控制項JLabel來顯示圖像。JLabel的setText方法用來設置標簽上的文本,而setIcon方法用來設置標簽上的圖標,根據兩個方法的調用與否狀況,標簽所展示的內容可分為下列三種情況:
1、只調用setText方法,未調用setIcon方法,此時標簽只顯示文本。
2、只調用setIcon方法,未調用setText方法,此時標簽只顯示圖像。
3、既調用setText方法,又調用setIcon方法,此時標簽同時顯示文本和圖像,且圖像在左邊、文本在右邊,即左圖右文。
然而setIcon方法的輸入參數卻是Icon圖標類型,並非早前介紹的緩存圖像BufferedImage,這意味著需要把緩存圖像轉換為圖標類型。其中的轉換過程用到了圖像圖標工具ImageIcon,由於該工具實現了Icon介面,因此它的實例可以作為setIcon方法的輸入參數。通過ImageIcon的構造方法,就能把緩存圖像轉為圖標對象,具體的轉換代碼如下所示:

		// 把圖片文件讀到緩存圖像
		BufferedImage image = ImageIO.read(new File("E:/apple.png"));
		ImageIcon icon = new ImageIcon(image); // 創建一個圖標

 

當然,ImageIcon本身是個圖標工具,讀取圖片文件何必要經過緩存圖像倒騰兩手呢?直接去指定的文件路徑讀取便是。於是依據圖片文件創建圖標對象的代碼變成了下麵這樣:

		ImageIcon icon = new ImageIcon("E:/apple.png"); // 創建一個指定路徑的圖標

 

可是構造方法傳入字元串算什麼意思?難道字元串一定是文件路徑嗎?顯然傳入字元串的方式並不嚴謹。更好的做法是傳入一個URL地址對象,明明白白地告訴編譯器,構造方法的輸入參數必須是個合法的文件地址,就像以下代碼表達的那樣:

		URL url = new URL("file:///E:/apple.png"); // 創建一個本地路徑的URL對象
		ImageIcon icon = new ImageIcon(url); // 創建一個指定URL的圖標

 

註意到構建URL對象的時候,文件路徑字元串添加了首碼“file:///”,表示該串為本地的文件路徑。除了本地文件,URL對象還能用來表達網路文件,只需將網路文件的完整http地址傳進去即可,此時根據網路圖片創建圖標對象的代碼示例如下:

		URL url = new URL("https://profile.csdnimg.cn/C/1/5/1_aqi00"); // 創建一個網路地址的URL對象
		ImageIcon icon = new ImageIcon(url); // 創建一個來自網路圖片的圖標

 

上述的幾種構造方法,都能用來創建圖標對象。獲取到圖標對象之後,就能調用setIcon方法在標簽控制項顯示圖像,還能調用setIconTextGap方法設置圖標與文字之間的空白距離。
接下來分別看看在標簽上顯示圖像與文本的組合結果,首先,只顯示圖像不顯示文本,則標簽控制項的方法調用代碼示例如下:

		ImageIcon icon = new ImageIcon("E:/apple.png"); // 創建一個指定路徑的圖標
		label.setIcon(icon); // 設置標簽的圖標
		label.setText(null); // 設置標簽的文本為空,此時不顯示文本

 

運行以上的測試代碼,彈出的視窗界面如下圖所示,可見標簽上的圖像居中展示。


其次,準備同時顯示圖像與文本,則標簽控制項的setIcon方法和setText方法均應指定非空對象,此時調用代碼如下所示:

		ImageIcon icon = new ImageIcon("E:/apple.png"); // 創建一個指定路徑的圖標
		label.setIcon(icon); // 設置標簽的圖標(圖標在文字左邊)
		label.setIconTextGap(10); // 設置圖標與文字之間的間隔大小
		label.setText("這是一個蘋果"); // 設置標簽的文本

 

運行以上的測試代碼,彈出的視窗界面如下圖所示,可見圖像和文本都顯示了出來。


再次,不顯示圖像只顯示文本,則標簽控制項的調用代碼如下所示:

		label.setIcon(null); // 設置標簽的圖標為空,此時不顯示圖像
		label.setText("這是一個蘋果"); // 設置標簽的文本

 

運行以上的測試代碼,彈出的視窗界面如下圖所示,可見JLabel控制項變為常規的文本標簽了。

 



更多Java技術文章參見《Java開發筆記(序)章節目錄


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p ...
  • shiro是一個強大而且易用的安全框架(主要包括認證和授權),它比spring security更加簡單,而且它不依賴於任何容器,可以和許多框架集成。 shiro的核心是安全管理器(SecurityManagement),它主要包括四個模塊: 1.Authentication:認證模塊,主要用於驗證 ...
  • 前言 今天上午被 Flink 的一個運算元困惑了下,具體問題是什麼呢? 我有這麼個需求:有不同種類型的告警數據流(包含恢複數據),然後我要將這些數據流做一個拆分,拆分後的話,每種告警裡面的數據又想將告警數據和恢複數據拆分出來。 結果,這個需求用 Flink 的 Split 運算符出現了問題。 分析 需 ...
  • 如何優雅關閉 Spring Boot 應用 如何優雅關閉 Spring Boot 應用前言定製 Tomcat Connector 行為內嵌 Tomcat 添加 Connector 回調開啟 Shutdown Endpoint模擬測試實現自動化總結參考 如何優雅關閉 Spring Boot 應用前言定 ...
  • 在我們的日常生活和工作中,難免會碰到要給別人傳文件的時候。可能這對現在的你來說不是一件很難的事情,估計相當多的一部分人說我可以直接把文件拖進微信或者 qq 里發給別人,但這個只適用於文件較少的時候,文件較多的時候用聊天工具來進行文件傳輸就又變成了一件很麻煩的事情。 這時候你可能又會說,那我可以傳到某 ...
  • T1 奶牛曬衣服 題目 【題目描述】 在熊大媽英明的帶領下,時針和他的同伴生下了許多牛寶寶。熊大媽決定給每個寶寶都穿上可愛的嬰兒裝。於是,為牛寶寶洗曬衣服就成了很不爽的事情。 聖人王擔負起了這個重任。洗完衣服後,你就要弄乾衣服。衣服在自然條件下用1的時間可以曬乾A點濕度。摳門的熊大媽買了1台烘衣機。 ...
  • pymysql是Python操作mysql的最主要方法,本文詳細介紹pymysql的建庫、建表和增刪改查操作。 ...
  • 在做SSM項目時發現一個有趣的bug,在這裡記錄一下。 資料庫表如下: 實體類:grade欄位初始設定為int類型 在用mybatis對第三條數據進行修改時,希望賦值的更改,未賦值的不更改,測試運行 修改後發現資料庫中的grade欄位變成了0,這不是我想要的,(按照正常需求應該是原來的數字5) 查看 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...