Java结合Swing实现龙年祝福语生成工具

 更新时间:2024年01月19日 08:18:51   作者:栈江湖  
Swing是一个为Java设计的GUI工具包,属于Java基础类的一部分,本文将使用Java和Swing实现龙年祝福语生成工具,感兴趣的小伙伴可以了解下

一、前言

Swing是一个为Java设计的GUI工具包,属于Java基础类的一部分。Swing包括了图形用户界面(GUI)功能,其组件包含:文本框、文本域、按钮、表格、列表等。

看着这个熟悉又陌生的界面,相信对大多数人来说Java Swing已经淡出了我们的视线。

再看看下面的界面,好像风格与上面完全不一样,但的确也是Java Swing。

原来Swing提供了可编程渲染模型,使用户可以对渲染细节进行控制。也就是使用了LAF,那么什么是LAF呢?

Java Swing LAF(Look and Feel)是用于更改Java Swing组件的外观和感觉的库。LAF可以为应用程序提供统一的视觉风格,并使其更具吸引力和易用。

二、Swing+LAF生成龙年祝福

以下就是使用Java Swing+Laf实现的龙年祝福语生成器:

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年开门红,事业有成,财源广进!",
            "龙年神兽守护您,幸福平安陪伴您!愿您龙年事业蒸蒸日上,家庭和和美美!"
            // 添加更多祝福语...
    };

  	//图片放在与class文件同目录
    private final String[] dragonImages = {
            "img1.jpg",
            "img2.jpg",
            "img3.jpg"
            // 添加更多龙年图片资源路径...
    };

    public DragonYearWishesGenerator() {
        initializeUI();
    }

    private void initializeUI() {
        // 设置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("绿色");

        // 添加颜色选择监听器
        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);

        // 最下层:龙年祝福语和复制按钮
        wishesLabel = new JLabel();
        wishesLabel.setHorizontalAlignment(JLabel.CENTER);
        add(wishesLabel, BorderLayout.SOUTH);

        copyButton = new JButton("复制");
        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);

        // 设置窗体大小为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);
            // 设置图片到中间层组件
            dragonImageLabel.setIcon(new ImageIcon(image));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 随机选择一条祝福语并显示在最下层
        index = random.nextInt(dragonYearWishes.length);
        wishesLabel.setText(dragonYearWishes[index]);

        // 根据选择的颜色修改字体颜色
        updateFontColor();
    }

    private void copyWishesToClipboard() {
        // 复制祝福语到剪贴板
        String wishes = wishesLabel.getText();
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(new StringSelection(wishes), null);
        JOptionPane.showMessageDialog(this, "祝福语已复制到剪贴板!");
    }

    private void updateFontColor() {
        // 根据选择的颜色修改字体颜色
        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的产品

IntelliJ IDEA

Google Android Studio

还有Eclipse、NetBeans、Mapollage、Jotasync、Apache JMeter等,目前来看好像主要就在IDE这个领域中应用。

3.2、LAF

LAF 指的是 "Look and Feel",它是用户界面设计中的一个概念,用于描述应用程序或窗体的外观和感觉。在 Java Swing 中,LAF 是一种机制,允许开发人员轻松地更改应用程序的外观,以使其适应不同的操作系统或用户偏好。

Java Swing 库提供了一组默认的 Look and Feel,例如 Metal、Nimbus 等。每个 Look and Feel 都定义了组件的外观和行为,以便它们在屏幕上显示为特定的外观风格。用户可以选择使用不同的 Look and Feel 来改变应用程序的外观,以使其与操作系统或其他应用程序一致。

一些第三方库也提供了自定义的 Look and Feel:

DarculaLaf

DarculaLaf,它模仿了 IntelliJ IDEA 的深色外观风格(Dark Theme)。Darcula 是 Java 桌面应用程序的 Look-n-Feel 和代码编辑器主题。该存储库主要关注 Java 外观,并包含现成的库。

FlatLaf

FlatLaf 是一个现代的 Java Swing Look and Feel,它提供了扁平化的外观,适用于创建现代化和清晰的用户界面。FlatLaf 通过提供扁平化的设计元素、清晰的图标和现代化的外观,使得 Swing 应用程序能够呈现现代风格的用户界面。

还有一些出色的LAF如JTattoo、WebLaF、Quaqua 等等。

Java Swing主要集中在 IDE(集成开发环境),如 IntelliJ IDEA, Eclipse, NetBeans 等,相比与QT之类的GUI,Java Swing的前景并不乐观。想当年老师还是教了好几堂课的,用此程序纪念一下。祝愿大家在这龙年里好运连连!!

以上就是Java结合Swing实现龙年祝福语生成工具的详细内容,更多关于Java Swing祝福语生成工具的资料请关注脚本之家其它相关文章!

相关文章

  • JavaWeb实现用户登录与注册功能

    JavaWeb实现用户登录与注册功能

    这篇文章主要为大家详细介绍了JavaWeb实现用户登录与注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java实现HmacSHA256算法进行加密方式

    java实现HmacSHA256算法进行加密方式

    这篇文章主要介绍了java实现HmacSHA256算法进行加密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • yaml配置对象map使用示例

    yaml配置对象map使用示例

    这篇文章主要为大家介绍了yaml配置对象map使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot使用Mybatis-Generator配置过程详解

    SpringBoot使用Mybatis-Generator配置过程详解

    这篇文章主要介绍了SpringBoot使用Mybatis-Generator配置过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java 堆排序实例(大顶堆、小顶堆)

    Java 堆排序实例(大顶堆、小顶堆)

    下面小编就为大家分享一篇Java 堆排序实例(大顶堆、小顶堆),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • java使用Socket类接收和发送数据

    java使用Socket类接收和发送数据

    Socket类是负责处理客户端通信的Java类。本文主要是介绍java使用Socket类接收和发送数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • Java并发编程之详解CyclicBarrier线程同步

    Java并发编程之详解CyclicBarrier线程同步

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口,ArrayBlockingQueue,DelayQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue,BlockingDeque接口,ConcurrentHashMap,CountDownLatch,本文为系列文章第十篇,需要的朋友可以参考下
    2021-06-06
  • Spring mvc拦截器实现原理解析

    Spring mvc拦截器实现原理解析

    这篇文章主要介绍了Spring mvc拦截器实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java数据结构之队列(动力节点Java学院整理)

    Java数据结构之队列(动力节点Java学院整理)

    队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 这篇文章详细给大家介绍了java数据结构之队列,感兴趣的朋友跟随小编一起学习吧
    2017-04-04
  • java逐行读取文件(读取文件每一行、按行读取文件)附带详细代码

    java逐行读取文件(读取文件每一行、按行读取文件)附带详细代码

    这篇文章主要给大家介绍了关于java逐行读取文件(读取文件每一行、按行读取文件)的相关资料,读取文件是我们在日常工作中经常遇到的一个需求,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09

最新评论