Java結(jié)合Swing實(shí)現(xiàn)龍年祝福語(yǔ)生成工具
一、前言
Swing是一個(gè)為Java設(shè)計(jì)的GUI工具包,屬于Java基礎(chǔ)類(lèi)的一部分。Swing包括了圖形用戶界面(GUI)功能,其組件包含:文本框、文本域、按鈕、表格、列表等。
看著這個(gè)熟悉又陌生的界面,相信對(duì)大多數(shù)人來(lái)說(shuō)Java Swing已經(jīng)淡出了我們的視線。

再看看下面的界面,好像風(fēng)格與上面完全不一樣,但的確也是Java Swing。

原來(lái)Swing提供了可編程渲染模型,使用戶可以對(duì)渲染細(xì)節(jié)進(jìn)行控制。也就是使用了LAF,那么什么是LAF呢?
Java Swing LAF(Look and Feel)是用于更改Java Swing組件的外觀和感覺(jué)的庫(kù)。LAF可以為應(yīng)用程序提供統(tǒng)一的視覺(jué)風(fēng)格,并使其更具吸引力和易用。
二、Swing+LAF生成龍年祝福
以下就是使用Java Swing+Laf實(shí)現(xiàn)的龍年祝福語(yǔ)生成器:

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 = {
"龍年大吉,好運(yùn)連連!",
"祝福你在新的一年里騰飛如龍!",
"龍年到,幸福跟著走,萬(wàn)事如意!",
"龍年到,祝福到,祝愿大家龍年快樂(lè)!",
"騰四海,福滿人間。2024年開(kāi)門(mén)紅,事業(yè)有成,財(cái)源廣進(jìn)!",
"龍年神獸守護(hù)您,幸福平安陪伴您!愿您龍年事業(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("龍年祝福語(yǔ)生成器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// 上層:字體顏色勾選
JPanel colorCheckboxPanel = new JPanel();
redCheckbox = new JCheckBox("紅色");
blueCheckbox = new JCheckBox("藍(lán)色");
greenCheckbox = new JCheckBox("綠色");
// 添加顏色選擇監(jiān)聽(tīng)器
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);
// 中間層:隨機(jī)選擇龍年圖片
generateWishesButton = new JButton("生成龍年祝福語(yǔ)");
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);
// 最下層:龍年祝福語(yǔ)和復(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() {
// 隨機(jī)選擇一張龍年圖片并顯示在中間層
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();
}
// 隨機(jī)選擇一條祝福語(yǔ)并顯示在最下層
index = random.nextInt(dragonYearWishes.length);
wishesLabel.setText(dragonYearWishes[index]);
// 根據(jù)選擇的顏色修改字體顏色
updateFontColor();
}
private void copyWishesToClipboard() {
// 復(fù)制祝福語(yǔ)到剪貼板
String wishes = wishesLabel.getText();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(wishes), null);
JOptionPane.showMessageDialog(this, "祝福語(yǔ)已復(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等,目前來(lái)看好像主要就在IDE這個(gè)領(lǐng)域中應(yīng)用。
3.2、LAF
LAF 指的是 "Look and Feel",它是用戶界面設(shè)計(jì)中的一個(gè)概念,用于描述應(yīng)用程序或窗體的外觀和感覺(jué)。在 Java Swing 中,LAF 是一種機(jī)制,允許開(kāi)發(fā)人員輕松地更改應(yīng)用程序的外觀,以使其適應(yīng)不同的操作系統(tǒng)或用戶偏好。
Java Swing 庫(kù)提供了一組默認(rèn)的 Look and Feel,例如 Metal、Nimbus 等。每個(gè) Look and Feel 都定義了組件的外觀和行為,以便它們?cè)谄聊簧巷@示為特定的外觀風(fēng)格。用戶可以選擇使用不同的 Look and Feel 來(lái)改變應(yīng)用程序的外觀,以使其與操作系統(tǒng)或其他應(yīng)用程序一致。
一些第三方庫(kù)也提供了自定義的 Look and Feel:
DarculaLaf
DarculaLaf,它模仿了 IntelliJ IDEA 的深色外觀風(fēng)格(Dark Theme)。Darcula 是 Java 桌面應(yīng)用程序的 Look-n-Feel 和代碼編輯器主題。該存儲(chǔ)庫(kù)主要關(guān)注 Java 外觀,并包含現(xiàn)成的庫(kù)。
FlatLaf
FlatLaf 是一個(gè)現(xiàn)代的 Java Swing Look and Feel,它提供了扁平化的外觀,適用于創(chuàng)建現(xiàn)代化和清晰的用戶界面。FlatLaf 通過(guò)提供扁平化的設(shè)計(jì)元素、清晰的圖標(biāo)和現(xiàn)代化的外觀,使得 Swing 應(yīng)用程序能夠呈現(xiàn)現(xiàn)代風(fēng)格的用戶界面。


還有一些出色的LAF如JTattoo、WebLaF、Quaqua 等等。
Java Swing主要集中在 IDE(集成開(kāi)發(fā)環(huán)境),如 IntelliJ IDEA, Eclipse, NetBeans 等,相比與QT之類(lèi)的GUI,Java Swing的前景并不樂(lè)觀。想當(dāng)年老師還是教了好幾堂課的,用此程序紀(jì)念一下。祝愿大家在這龍年里好運(yùn)連連!!
以上就是Java結(jié)合Swing實(shí)現(xiàn)龍年祝福語(yǔ)生成工具的詳細(xì)內(nèi)容,更多關(guān)于Java Swing祝福語(yǔ)生成工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot Cache @CacheEvict 無(wú)法模糊刪除的解決方案
這篇文章主要介紹了Springboot Cache @CacheEvict 無(wú)法模糊刪除的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot中的Validation參數(shù)校驗(yàn)詳解
這篇文章主要介紹了Springboot中的Validation參數(shù)校驗(yàn)詳解,Springboot參數(shù)校驗(yàn)是一種常用的驗(yàn)證機(jī)制,在傳遞參數(shù)時(shí)進(jìn)行校驗(yàn),以確保參數(shù)的有效性和正確性,該機(jī)制可以幫助開(kāi)發(fā)者在代碼實(shí)現(xiàn)前就避免一些常見(jiàn)的錯(cuò)誤,需要的朋友可以參考下2023-10-10
Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實(shí)例分享
這篇文章主要介紹了Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實(shí)例,有需要的朋友可以參考一下2014-01-01
Java實(shí)現(xiàn)獲取前、后N天日期的函數(shù)分享
本文給大家分享的是使用java實(shí)現(xiàn)的獲取當(dāng)前日期前后N天的函數(shù),非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-03-03
Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作
這篇文章主要介紹了Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
idea配置Tomcat時(shí)沒(méi)有Artifacts選項(xiàng)的解決方法
本文主要介紹了idea配置Tomcat時(shí)沒(méi)有Artifacts選項(xiàng)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解
這篇文章主要介紹了java服務(wù)器容器調(diào)優(yōu),如果接口響應(yīng)時(shí)間超過(guò)了既定數(shù)據(jù),項(xiàng)目支撐不了這么大的請(qǐng)求,就需要對(duì)項(xiàng)目以及項(xiàng)目接口進(jìn)行數(shù)據(jù)庫(kù)、容器、緩存等方面的調(diào)優(yōu),文章中有詳細(xì)的代碼示例,需要的朋友可以參考一下2023-04-04
JAVA設(shè)計(jì)模式之建造者模式原理與用法詳解
這篇文章主要介紹了JAVA設(shè)計(jì)模式之建造者模式,簡(jiǎn)單說(shuō)明了建造者模式的原理、組成,并結(jié)合實(shí)例形式分析了java建造者模式的定義與用法,需要的朋友可以參考下2017-08-08

