package utils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class JPanelByCalendar extends JPanel {
String[] weekName=new String[]{"一","二","三","四","五","六","日"};
private int status=0;//0日期,1月份,2年份
private LocalDate focusDate;
private JLabel focusDayJLabel;
private LocalDate nowDate=LocalDate.now();
private JLabel nowMonthJLabel;
private JLabel head;//头部容器
private JPanel yearJPanel;//年份显示容器
private List<JLabel> yearJLabel=new ArrayList<>(12);
private JPanel monthJPanel;//月份显示容器
private List<JLabel> monthJLabel=new ArrayList<>(12);
private JPanel dayJPanel;//日期显示容器
private List<JLabel> dayJLabel=new ArrayList<>(49);
private JLabel viewJLabel;//动态显示月份/年份
private JLabel upJLabel;//上一页按钮
private JLabel downJLabel;//下一页按钮
public JPanelByCalendar() {
super();
this.setLayout(null);
head = new JLabel();
head.setBounds(0,0,300,50);
// 获取当前日期
LocalDate currentDate = LocalDate.now();
focusDate=currentDate;
int year = currentDate.getYear();
int month = currentDate.getMonthValue();
int dayOfMonth = currentDate.getDayOfMonth();
String dayOfWeek = currentDate.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
JLabel nowDateJLabel=new JLabel(String.format("%s年%s月%s日,%s",year,month,dayOfMonth,dayOfWeek));
nowDateJLabel.setBounds(0,0,300,20);
nowDateJLabel.setHorizontalAlignment(JLabel.CENTER);
nowDateJLabel.setOpaque(true);
nowDateJLabel.setBackground(Color.LIGHT_GRAY);
viewJLabel=new JLabel(String.format("\t%s年%s月",year,month));
viewJLabel.addMouseListener(new MouseUpListener(viewJLabel,0) {
@Override
public void mouseClicked(MouseEvent e) {
//修改选框
if(status==0){
status=1;
//展示月份
refreshMonthJPanel();
JPanelByCalendar.this.remove(1);
JPanelByCalendar.this.add(monthJPanel,1);
JPanelByCalendar.this.repaint();
}else if(status==1){
status=2;
//展示年份
refreshYearJPanel();
JPanelByCalendar.this.remove(1);
JPanelByCalendar.this.add(yearJPanel,1);
JPanelByCalendar.this.repaint();
}
}
});
viewJLabel.setBounds(15,22,170,24);
viewJLabel.setOpaque(true);
// viewJLabel.setBackground(Color.lightGray);
//向上翻页
upJLabel=new JLabel("㊤");
upJLabel.addMouseListener(new MouseUpListener(upJLabel,0) {
@Override
public void mouseClicked(MouseEvent e) {
if(status==0){
focusDate=focusDate.minusMonths(1);
refreshDayJPanel();
}else if(status==1){
focusDate=focusDate.minusYears(1);
refreshMonthJPanel();
}else {
focusDate=focusDate.minusYears(16);
refreshYearJPanel();
}
JPanelByCalendar.this.repaint();
}
});
upJLabel.setBounds(195,22,40,24);
upJLabel.setOpaque(true);
// upJLabel.setBackground(Color.lightGray);
upJLabel.setHorizontalAlignment(JLabel.CENTER);
//向下翻页
downJLabel=new JLabel("㊦");
downJLabel.addMouseListener(new MouseUpListener(downJLabel,0) {
@Override
public void mouseClicked(MouseEvent e) {
if(status==0){
focusDate=focusDate.plusMonths(1);
refreshDayJPanel();
}else if(status==1){
focusDate=focusDate.plusYears(1);
refreshMonthJPanel();
}else {
focusDate=focusDate.plusYears(16);
refreshYearJPanel();
}
JPanelByCalendar.this.repaint();
}
});
downJLabel.setBounds(245,22,40,24);
downJLabel.setOpaque(true);
// downJLabel.setBackground(Color.lightGray);
downJLabel.setHorizontalAlignment(JLabel.CENTER);
head.add(nowDateJLabel,0);
head.add(upJLabel,1);
head.add(downJLabel,2);
head.add(viewJLabel,3);
head.setBorder(BorderFactory.createMatteBorder(0,0,2,0,Color.gray));
this.add(head,0);
//初始化年份
yearJPanel=new JPanel();
yearJPanel.setLayout(new GridLayout(4,4));
yearJPanel.setBounds(0,50,300,212);
yearJPanel.setBorder(BorderFactory.createLineBorder(Color.gray,1));
for (int i = year; i <year+16; i++) {
JLabel jLabel = new JLabel();
jLabel.setOpaque(true);
jLabel.setBackground(Color.white);
jLabel.setHorizontalAlignment(JLabel.CENTER);
jLabel.addMouseListener(new MouseUpListener(jLabel) {
@Override
public void mouseClicked(MouseEvent e) {
status=1;
jLabel.setBackground(Color.white);
int year = Integer.valueOf(jLabel.getText());
focusDate=LocalDate.ofYearDay(year,1);
//展示月份
refreshMonthJPanel();
JPanelByCalendar.this.remove(1);
JPanelByCalendar.this.add(monthJPanel,1);
JPanelByCalendar.this.repaint();
}
});
yearJLabel.add(jLabel);
yearJPanel.add(jLabel);
}
//初始化月份
monthJPanel=new JPanel();
monthJPanel.setLayout(new GridLayout(3,4));
monthJPanel.setBounds(0,50,300,212);
monthJPanel.setBorder(BorderFactory.createLineBorder(Color.gray,1));
for (int i = 1; i <= 12; i++) {
JLabel jLabel = new JLabel();
jLabel.setOpaque(true);
jLabel.setBackground(Color.white);
jLabel.setHorizontalAlignment(JLabel.CENTER);
jLabel.setText(String.valueOf(i));
jLabel.addMouseListener(new MouseUpListener(jLabel) {
@Override
public void mouseClicked(MouseEvent e) {
status=0;
jLabel.setBackground(Color.white);
int month = Integer.valueOf(jLabel.getText());
focusDate=focusDate.withMonth(month).withDayOfMonth(1);
//展示日期
refreshDayJPanel();
JPanelByCalendar.this.remove(1);
JPanelByCalendar.this.add(dayJPanel,1);
JPanelByCalendar.this.repaint();
}
});
monthJPanel.add(jLabel);
monthJLabel.add(jLabel);
}
//初始化日期
dayJPanel=new JPanel();
dayJPanel.setLayout(new GridLayout(7,7));
dayJPanel.setBounds(0,50,300,212);
dayJPanel.setBorder(BorderFactory.createLineBorder(Color.gray,1));
for (int i = 0; i < 49; i++) {
JLabel jLabel = new JLabel();
jLabel.setOpaque(true);
jLabel.setBackground(Color.white);
jLabel.setHorizontalAlignment(JLabel.CENT
没有合适的资源?快使用搜索试试~ 我知道了~
Java实现日期选择,一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释
共24个文件
class:12个
java:4个
jar:4个
需积分: 5 0 下载量 163 浏览量
2024-04-29
10:43:30
上传
评论
收藏 626KB ZIP 举报
温馨提示
一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释 代码创建了一个简单的Java Swing时间日期选择器,包含一个输入框、一个按钮和一个日期标签。 当点击按钮时,会获取当前时间日期并显示在输入框中。 用户可以在输入框中输入或选择一个日期。 该代码使用了Java Swing库中的组件和事件处理机制来实现时间日期选择器的功能。
资源推荐
资源详情
资源评论
收起资源包目录
GoSaveTools.zip (24个子文件)
GoSaveTools
lib
jgoodies-looks-2.4.1.jar 384KB
jgoodies-common-1.2.0.jar 27KB
junit-4.6.jar 213KB
jcalendar-1.4.jar 161KB
.classpath 716B
.settings
org.eclipse.jdt.core.prefs 598B
org.eclipse.core.resources.prefs 80B
src
utils
Common.java 3KB
CalculateUtils.java 4KB
GoSaveMain.java 5KB
JPanelByCalendar.java 12KB
entity
bin
utils
JPanelByCalendar$6.class 2KB
JPanelByCalendar$4.class 2KB
GoSaveMain$1.class 903B
JPanelByCalendar$5.class 2KB
JPanelByCalendar$2.class 1KB
GoSaveMain.class 6KB
JPanelByCalendar$3.class 1KB
JPanelByCalendar$MouseUpListener.class 1KB
Common.class 4KB
JPanelByCalendar$1.class 1KB
CalculateUtils.class 4KB
JPanelByCalendar.class 9KB
entity
.project 387B
共 24 条
- 1
资源评论
qq_492448446
- 粉丝: 826
- 资源: 73
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功