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

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

原來Swing提供了可編程渲染模型,使用戶可以對渲染細節(jié)進行控制。也就是使用了LAF,那么什么是LAF呢?
Java Swing LAF(Look and Feel)是用于更改Java Swing組件的外觀和感覺的庫。LAF可以為應(yīng)用程序提供統(tǒ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; // 默認黑色
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 庫提供了一組默認的 Look and Feel,例如 Metal、Nimbus 等。每個 Look and Feel 都定義了組件的外觀和行為,以便它們在屏幕上顯示為特定的外觀風格。用戶可以選擇使用不同的 Look and Feel 來改變應(yīng)用程序的外觀,以使其與操作系統(tǒng)或其他應(yīng)用程序一致。
一些第三方庫也提供了自定義的 Look and Feel:
DarculaLaf
DarculaLaf,它模仿了 IntelliJ IDEA 的深色外觀風格(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è)計元素、清晰的圖標和現(xiàn)代化的外觀,使得 Swing 應(yīng)用程序能夠呈現(xiàn)現(xiàn)代風格的用戶界面。


還有一些出色的LAF如JTattoo、WebLaF、Quaqua 等等。
Java Swing主要集中在 IDE(集成開發(fā)環(huán)境),如 IntelliJ IDEA, Eclipse, NetBeans 等,相比與QT之類的GUI,Java Swing的前景并不樂觀。想當年老師還是教了好幾堂課的,用此程序紀念一下。祝愿大家在這龍年里好運連連?。?/p>
以上就是Java結(jié)合Swing實現(xiàn)龍年祝福語生成工具的詳細內(nèi)容,更多關(guān)于Java Swing祝福語生成工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在JAVA?Web項目中動態(tài)加載DLL/SO文件的方法
在JAVA?Web項目中,我們經(jīng)常需要調(diào)用一些第三方庫或者實現(xiàn)一些JAVA本身不支持的功能,這時,我們可能會考慮使用JNI來調(diào)用DLL或SO文件,然而,因此,本文將介紹如何在JAVA?Web項目中動態(tài)加載DLL/SO文件,需要的朋友可以參考下2024-12-12
Java中for(;;)和while(true)的區(qū)別
這篇文章主要介紹了 Java中for(;;)和while(true)的區(qū)別,文章圍繞for(;;)和while(true)的相關(guān)自來哦展開詳細內(nèi)容,需要的小伙伴可以參考一下,希望對大家有所幫助2021-11-11
HttpServletRequest對象方法的用法小結(jié)
HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協(xié)議訪問服務(wù)器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發(fā)人員通過這個對象的相關(guān)方法,即可以獲得客戶的這些信息2017-03-03
Spring?Boot?優(yōu)雅整合多數(shù)據(jù)源
這篇文章主要介紹了Spring?Boot?優(yōu)雅整合多數(shù)據(jù)源,多數(shù)據(jù)源就是在一個單一應(yīng)用中涉及到了兩個及以上的數(shù)據(jù)庫,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章介紹2022-05-05

