Java結(jié)合Swing實現(xiàn)龍年祝福語生成工具
一、前言
Swing是一個為Java設(shè)計的GUI工具包,屬于Java基礎(chǔ)類的一部分。Swing包括了圖形用戶界面(GUI)功能,其組件包含:文本框、文本域、按鈕、表格、列表等。
看著這個熟悉又陌生的界面,相信對大多數(shù)人來說Java Swing已經(jīng)淡出了我們的視線。
再看看下面的界面,好像風(fēng)格與上面完全不一樣,但的確也是Java Swing。
原來Swing提供了可編程渲染模型,使用戶可以對渲染細節(jié)進行控制。也就是使用了LAF,那么什么是LAF呢?
Java Swing LAF(Look and Feel)是用于更改Java Swing組件的外觀和感覺的庫。LAF可以為應(yīng)用程序提供統(tǒng)一的視覺風(fēng)格,并使其更具吸引力和易用。
二、Swing+LAF生成龍年祝福
以下就是使用Java Swing+Laf實現(xiàn)的龍年祝福語生成器:
import javax.swing.*; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; import java.util.Random; import javax.imageio.ImageIO; public class DragonYearWishesGenerator extends JFrame { private JLabel wishesLabel; private JButton generateWishesButton; private JButton copyButton; private JLabel dragonImageLabel; private JCheckBox redCheckbox; private JCheckBox blueCheckbox; private JCheckBox greenCheckbox; private final String[] dragonYearWishes = { "龍年大吉,好運連連!", "祝福你在新的一年里騰飛如龍!", "龍年到,幸福跟著走,萬事如意!", "龍年到,祝福到,祝愿大家龍年快樂!", "騰四海,福滿人間。2024年開門紅,事業(yè)有成,財源廣進!", "龍年神獸守護您,幸福平安陪伴您!愿您龍年事業(yè)蒸蒸日上,家庭和和美美!" // 添加更多祝福語... }; //圖片放在與class文件同目錄 private final String[] dragonImages = { "img1.jpg", "img2.jpg", "img3.jpg" // 添加更多龍年圖片資源路徑... }; public DragonYearWishesGenerator() { initializeUI(); } private void initializeUI() { // 設(shè)置Darcula外觀 try { UIManager.setLookAndFeel("com.bulenkov.darcula.DarculaLaf"); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.updateComponentTreeUI(this); this.setSize(400, 200); setTitle("龍年祝福語生成器"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // 上層:字體顏色勾選 JPanel colorCheckboxPanel = new JPanel(); redCheckbox = new JCheckBox("紅色"); blueCheckbox = new JCheckBox("藍色"); greenCheckbox = new JCheckBox("綠色"); // 添加顏色選擇監(jiān)聽器 redCheckbox.addActionListener(e -> updateFontColor()); blueCheckbox.addActionListener(e -> updateFontColor()); greenCheckbox.addActionListener(e -> updateFontColor()); colorCheckboxPanel.add(redCheckbox); colorCheckboxPanel.add(blueCheckbox); colorCheckboxPanel.add(greenCheckbox); add(colorCheckboxPanel, BorderLayout.NORTH); // 中間層:隨機選擇龍年圖片 generateWishesButton = new JButton("生成龍年祝福語"); generateWishesButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { displayRandomDragonImage(); } }); add(generateWishesButton, BorderLayout.CENTER); dragonImageLabel = new JLabel(); dragonImageLabel.setHorizontalAlignment(JLabel.CENTER); add(dragonImageLabel, BorderLayout.CENTER); // 最下層:龍年祝福語和復(fù)制按鈕 wishesLabel = new JLabel(); wishesLabel.setHorizontalAlignment(JLabel.CENTER); add(wishesLabel, BorderLayout.SOUTH); copyButton = new JButton("復(fù)制"); copyButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { copyWishesToClipboard(); } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(generateWishesButton); buttonPanel.add(copyButton); add(buttonPanel, BorderLayout.EAST); // 設(shè)置窗體大小為600x600 setSize(600, 600); pack(); setLocationRelativeTo(null); } private void displayRandomDragonImage() { // 隨機選擇一張龍年圖片并顯示在中間層 Random random = new Random(); int index = random.nextInt(dragonImages.length); try { // 從文件加載圖片 InputStream stream = getClass().getResourceAsStream(dragonImages[index]); BufferedImage image = ImageIO.read(stream); // 設(shè)置圖片到中間層組件 dragonImageLabel.setIcon(new ImageIcon(image)); } catch (IOException e) { e.printStackTrace(); } // 隨機選擇一條祝福語并顯示在最下層 index = random.nextInt(dragonYearWishes.length); wishesLabel.setText(dragonYearWishes[index]); // 根據(jù)選擇的顏色修改字體顏色 updateFontColor(); } private void copyWishesToClipboard() { // 復(fù)制祝福語到剪貼板 String wishes = wishesLabel.getText(); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(new StringSelection(wishes), null); JOptionPane.showMessageDialog(this, "祝福語已復(fù)制到剪貼板!"); } private void updateFontColor() { // 根據(jù)選擇的顏色修改字體顏色 Color fontColor = Color.BLACK; // 默認(rèn)黑色 if (redCheckbox.isSelected()) { fontColor = Color.RED; } else if (blueCheckbox.isSelected()) { fontColor = Color.BLUE; } else if (greenCheckbox.isSelected()) { fontColor = Color.GREEN; } wishesLabel.setForeground(fontColor); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new DragonYearWishesGenerator().setVisible(true); } }); } }
三、Swing外觀
3.1、使用Swing的產(chǎn)品
IntelliJ IDEA
Google Android Studio
還有Eclipse、NetBeans、Mapollage、Jotasync、Apache JMeter等,目前來看好像主要就在IDE這個領(lǐng)域中應(yīng)用。
3.2、LAF
LAF 指的是 "Look and Feel",它是用戶界面設(shè)計中的一個概念,用于描述應(yīng)用程序或窗體的外觀和感覺。在 Java Swing 中,LAF 是一種機制,允許開發(fā)人員輕松地更改應(yīng)用程序的外觀,以使其適應(yīng)不同的操作系統(tǒng)或用戶偏好。
Java Swing 庫提供了一組默認(rèn)的 Look and Feel,例如 Metal、Nimbus 等。每個 Look and Feel 都定義了組件的外觀和行為,以便它們在屏幕上顯示為特定的外觀風(fēng)格。用戶可以選擇使用不同的 Look and Feel 來改變應(yīng)用程序的外觀,以使其與操作系統(tǒng)或其他應(yīng)用程序一致。
一些第三方庫也提供了自定義的 Look and Feel:
DarculaLaf
DarculaLaf,它模仿了 IntelliJ IDEA 的深色外觀風(fēng)格(Dark Theme)。Darcula 是 Java 桌面應(yīng)用程序的 Look-n-Feel 和代碼編輯器主題。該存儲庫主要關(guān)注 Java 外觀,并包含現(xiàn)成的庫。
FlatLaf
FlatLaf 是一個現(xiàn)代的 Java Swing Look and Feel,它提供了扁平化的外觀,適用于創(chuàng)建現(xiàn)代化和清晰的用戶界面。FlatLaf 通過提供扁平化的設(shè)計元素、清晰的圖標(biāo)和現(xiàn)代化的外觀,使得 Swing 應(yīng)用程序能夠呈現(xiàn)現(xiàn)代風(fēng)格的用戶界面。
還有一些出色的LAF如JTattoo、WebLaF、Quaqua 等等。
Java Swing主要集中在 IDE(集成開發(fā)環(huán)境),如 IntelliJ IDEA, Eclipse, NetBeans 等,相比與QT之類的GUI,Java Swing的前景并不樂觀。想當(dāng)年老師還是教了好幾堂課的,用此程序紀(jì)念一下。祝愿大家在這龍年里好運連連?。?/p>
以上就是Java結(jié)合Swing實現(xiàn)龍年祝福語生成工具的詳細內(nèi)容,更多關(guān)于Java Swing祝福語生成工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot Cache @CacheEvict 無法模糊刪除的解決方案
這篇文章主要介紹了Springboot Cache @CacheEvict 無法模糊刪除的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Springboot中的Validation參數(shù)校驗詳解
這篇文章主要介紹了Springboot中的Validation參數(shù)校驗詳解,Springboot參數(shù)校驗是一種常用的驗證機制,在傳遞參數(shù)時進行校驗,以確保參數(shù)的有效性和正確性,該機制可以幫助開發(fā)者在代碼實現(xiàn)前就避免一些常見的錯誤,需要的朋友可以參考下2023-10-10Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實例分享
這篇文章主要介紹了Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實例,有需要的朋友可以參考一下2014-01-01Java實現(xiàn)獲取前、后N天日期的函數(shù)分享
本文給大家分享的是使用java實現(xiàn)的獲取當(dāng)前日期前后N天的函數(shù),非常的簡單實用,有需要的小伙伴可以參考下。2015-03-03Java xml數(shù)據(jù)格式返回實現(xiàn)操作
這篇文章主要介紹了Java xml數(shù)據(jù)格式返回實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08idea配置Tomcat時沒有Artifacts選項的解決方法
本文主要介紹了idea配置Tomcat時沒有Artifacts選項的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解
這篇文章主要介紹了java服務(wù)器容器調(diào)優(yōu),如果接口響應(yīng)時間超過了既定數(shù)據(jù),項目支撐不了這么大的請求,就需要對項目以及項目接口進行數(shù)據(jù)庫、容器、緩存等方面的調(diào)優(yōu),文章中有詳細的代碼示例,需要的朋友可以參考一下2023-04-04