JAVA自定义日期选择器

news/2024/5/18 20:21:03

下载jar地址,

https://toedter.com/jcalendar/ jar包下载地址

依赖包如下图所示:

整个项目代码已经上传到CSDN

https://download.csdn.net/download/qq_30273575/89241601?ydreferer=aHR0cHM6Ly9tcC5jc2RuLm5ldC9tcF9kb3dubG9hZC9tYW5hZ2UvZG93bmxvYWQvVXBEZXRhaWxlZA%3D%3D

package utils;

import javax.swing.*;
import com.toedter.calendar.JDateChooser;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

public class GoSaveMain extends JFrame implements ActionListener{
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    //https://www.cnblogs.com/lihello/p/12795948.html 下载使用显示日期的jar包
    // https://toedter.com/jcalendar/ jar包下载地址
    
    //其他参考 https://blog.csdn.net/u012426327/article/details/77712882
    
    
    private JLabel date1Lable;
    private JLabel date2Lable;
    private JLabel amountLable;
    private JLabel interestRateLable;
    private JLabel reslutLable;

    
    private JTextField amountField;
    private JTextField interestRateField;
    private JTextField resultField;
    private JDateChooser dateChooser;
    private JDateChooser dateChooser2;
    
    private JButton runButton;
    private JCheckBox simulateBox;
    
    public GoSaveMain() {
        // 创建JDateChooser组件
        dateChooser = new JDateChooser();
        dateChooser2 = new JDateChooser();
        // 设置JDateChooser的宽度
        dateChooser.setPreferredSize(new Dimension(100, dateChooser.getPreferredSize().height));
        dateChooser2.setPreferredSize(new Dimension(100, dateChooser.getPreferredSize().height));
        
        JPanel date_panel = new JPanel();
        date_panel.setLayout(new GridLayout(6,2,1,1)) ;
        
        date1Lable = new JLabel("StartDate");
        date2Lable = new JLabel("EndDate");
        amountLable = new JLabel("Amount");
        reslutLable = new JLabel("Result");
        amountField=new JTextField("") ;
        interestRateLable = new JLabel("Rate");
        interestRateField=new JTextField("") ;
        resultField=new JTextField("") ;
        runButton = new JButton("Calculate") ;
        simulateBox = new JCheckBox("模拟时间8点前");
        date_panel.add(date1Lable);
        date_panel.add(dateChooser);
        date_panel.add(date2Lable);
        date_panel.add(dateChooser2);
        date_panel.add(amountLable);
        date_panel.add(amountField);
        date_panel.add(interestRateLable);
        date_panel.add(interestRateField);
        date_panel.add(simulateBox);
        date_panel.add(runButton);
        date_panel.add(reslutLable);
        date_panel.add(resultField);
        runButton.addActionListener(this);
        
        // 创建一个FlowLayout布局
        this.setLayout(new FlowLayout());
 
        // 将JDateChooser添加到JFrame
        this.add(date_panel);
 
        // 设置JFrame的其他属性
        this.setTitle("计算Gosave利息");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        
        this.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                int flag = JOptionPane.showConfirmDialog(null, "要退出该程序吗?","友情提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
                if(flag==JOptionPane.YES_OPTION) {
                    System.exit(0);
                }else {
                    return;
                }
            }
        });
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new GoSaveMain();
        });
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource()==runButton){
            System.out.println("\nStart to Calculate interest!!!");
            String  amount = this.amountField.getText();
            String interestRate = this.interestRateField.getText();
            Date  dateChooser= this.dateChooser.getDate();
            Date  dateChooser2= this.dateChooser2.getDate();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String startDate = sdf.format(dateChooser);
            String endDate = sdf.format(dateChooser2);
            System.out.println(amount);
            System.out.println(interestRate);
            System.out.println(startDate);
            System.out.println(endDate);
            
            String checkBoxValue = "";
            if(simulateBox.isSelected()) {
                checkBoxValue = "true";
            }else {
                checkBoxValue = "false";
            }
            
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("startDate", startDate);
            map.put("endDate", Common.getRealEndDate(endDate, getMinusDays(checkBoxValue)));
            map.put("amount", amount);
            map.put("interestRate", interestRate);
            map.put("checkBoxValue", checkBoxValue);
            
            
            CalculateUtils calculateUtils = new CalculateUtils(map);
            double value = calculateUtils.getResult();
            this.resultField.setText(""+value);
        }
    }
    
    public int getMinusDays(String checkBoxValue) {
        int minus_days =0;
        if(Common.getHoursThisTime()<8) {
            minus_days =1;
        }
        if(checkBoxValue.contains("true")){
            minus_days =1;
        }
        System.out.println("minus_days: "+minus_days);
        return minus_days;
    }
    

}
 


http://www.mrgr.cn/p/77428010

相关文章

探讨宝塔切换php版本切换失败的原因和解决方法

宝塔切换php版本是非常简单的操作,但是有时候切换失败可能会导致系统无法正常工作,给我们带来很大的麻烦和困扰。在本文中,我们将探讨可能导致宝塔切换php版本失败的一些常见原因和解决方法。一、检查宝塔是否已成功安装PHP版本在切换PHP版本之前,请确保您已经正确地安装了…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

二叉树相关的三个常见算法题

算法题一// 计算一颗二叉树的所有节点的数量 int BinaryTree_CountNode(Tnode_t *root) {int n1, n2;if (NULL == root){return 0;}n1 = BinaryTree_CountNode(root->lchild);n2 = BinaryTree_CountNode(root->rchild);return n1 + n2 + 1; }算法题二// 计算一颗二叉树的…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

物联网D1——建工程,配环境,注意事项

1.STLink、JLink、USB等驱动配置keil环境配置——下载芯片对应型号的包——导入库函数源文件、Core内核文件、对应芯片系统文件。 2.学会看芯片手册 3.在STM32微控制器中&#xff0c;CRH通常指的是控制寄存器高位&#xff08;Control Register High&#xff09;。 在这种情况下…

金汇龙王战神程序智慧管家app拨号精灵下载说明

金汇战神程序App下载,龙王程序app,智慧管家下载安装 厂家售后使用说明及安装教程:金汇战神系金汇科技出品战神程序,无区域限制,高性价比高,调试安装更加快捷方便,安装时间大大缩短。添加微心 ZSMJCC 咨询索取金汇相关App下载链接 手机上安装好金汇战神小精灵app后,连接上…

202209青少年软件编程(Python) 等级考试试卷(一级)

第 1 题 【单选题】 表达式 len(“学史明理增信 , 读史终生受益”) > len(" reading history will benefit you ") 的结果是? ( ) A :0 B :True C :False D :1 正确答案:C 试题解析: 第 2 题 【单选题】 在 turtle 画图中, 常常使用 turtle.color(co…

Prometheus+Grafana多方位监控

PrometheusGrafana多方位监控 契机 ⚙ 最近发现火山引擎有托管的Prometheus,可是当前是邀测阶段。并且发现火山云的ECS是自带开机自启的exporter的。刚好需要搭建一套服务器监控&#xff0c;所以研究了一套Prometheus监控&#xff0c;包含linux主机监控nginx监控es监控rabbitM…

Flink checkpoint 源码分析- Checkpoint barrier 传递源码分析

背景 在上一篇的博客里&#xff0c;大致介绍了flink checkpoint中的触发的大体流程&#xff0c;现在介绍一下触发之后下游的算子是如何做snapshot。 上一篇的文章: Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析-CSDN博客 代码分析 1. 在SubtaskCheckpointCoo…

Go协程的底层原理(图文详解)

为什么要有协程 什么是进程 操作系统“程序”的最小单位进程用来占用内存空间进程相当于厂房&#xff0c;占用工厂空间 什么是线程 进程如果比作厂房&#xff0c;线程就是厂房里面的生产线&#xff1a; 每个进程可以有多个线程线程使用系统分配给进程的内存&#xff0c;线…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术&#xff0c;也被称为自动语音识别&#xff0c;目标是以电脑自动将…

电脑是组装的好还是原装的好?

组装电脑和原装电脑孰优孰劣一直备受争议。困扰着无数人的问题:组装电脑和原装电脑到底哪个更出色?下面php小编新一将为您详细介绍这两者的优缺点,帮助您做出明智的选择。继续阅读,探索组装电脑的灵活性、升级潜力和性价比,以及原装电脑的稳定性、保修和简便性。电脑是组装…

32.Docker认识

Docker介绍 Docker是一个快速交付应用&#xff0c;运行应用的技术。 1.可以将程序、依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统。 2.运行时利用沙箱机制行程隔离容器&#xff0c;各个应用互不干扰。 3.启动、移除都可以通过一行命令完成&am…

【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础

一、绘制静止图像 使用matplotlib库绘制函数图像y sin(pi * x): import math import matplotlib.pyplot as pltx_min -2.0 x_max 2.0N 1000x1 [] y1 []for i in range(N 1):x x_min (x_max - x_min) * i / Ny math.sin(math.pi * x)x1.append(x)y1.append(y)plt.xl…

OpenCV(一) —— OpenCV 基础

1、OpenCV 简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个基于 BSD 许可开源发行的跨平台的计算机视觉库。可用于开发实时的图像处理、计算机视觉以及模式识别程序。由英特尔公司发起并参与开发&#xff0c;以 BSD 许可证授权发行&#xff0c…

小程序wx.getlocation接口如何开通?

小程序地理位置接口有什么功能&#xff1f; 随着小程序生态的发展&#xff0c;越来越多的小程序开发者会通过官方提供的自带接口来给用户提供便捷的服务。但是当涉及到地理位置接口时&#xff0c;却经常遇到申请驳回的问题&#xff0c;反复修改也无法通过&#xff0c;给的理由…

python交教程4:文件操作

文件操作流程 人类操作一个word流程: 1、找到文件、双击打开 2. 读或修改 3. 保存&关闭 ⽤python操作⽂件也差不多: 只读模式 创建模式 追加模式 遍历文件 图片视频--二进制文件 其他方法 打开文件--混合模式

Go Web开发【xorm 框架】

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

Gateway结合Nacos使用!!!

一、本地结合使用 1. 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 2. bootstarp.yml配置文件 如果Nacos中配置使用yaml格式&…