`
isiqi
  • 浏览: 16470913 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

日历界面

阅读更多

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

/**
* <p>Title: Swing日历</p>
* <p>Description: 操作日期</p>
* @author duxu2004
* @version 1.0.1
*/

class JCalendar extends JPanel{
//动态表示年月日
private int year = 0;
private int month = 0;
private int day = 0;
//主面板
private JPanel Main = new JPanel();
//日面板
private JPanel jPanelDay = new JPanel();
//月面板
private JPanel jPanelMonth = new JPanel();
//年的输入位置
private JTextField Year = new JTextField();
//月的输入位置
private JTextField Month = new JTextField();
//减少月份
private JButton MonthDown = new JButton();
//增加月份
private JButton MonthUp = new JButton();

private JPanel jPanelButton = new JPanel();
//减少年份
private JButton YearDown = new JButton();
//增加年份
private JButton YearUp = new JButton();
//显示日期的位置
private JLabel Out = new JLabel();
//中国时区,以后可以从这里扩展可以设置时区的功能
private Locale l = Locale.CHINESE;
//主日历
private GregorianCalendar cal = new GregorianCalendar(l);
//星期面板
private JPanel weekPanel = new JPanel();
//天按钮组
private JToggleButton[] days = new JToggleButton[42];
//天面板
private JPanel Days = new JPanel();
//标示
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel();
private JLabel jLabel4 = new JLabel();
private JLabel jLabel5 = new JLabel();
private JLabel jLabel6 = new JLabel();
private JLabel jLabel7 = new JLabel();
//当前选择的天数按钮
private JToggleButton cur = null;
//月份天数数组,用来取得当月有多少天
// 1 2 3 4 5 6 7 8 9 10 11 12
private int[] mm = {31,28,31,30,31,30,31,31,30,31,30,31};

//空日期构造函数
public JCalendar() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}

}
//带日期设置的构造函数
public JCalendar(int year, int month, int day) {
cal.set(year, month, day);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//带日历输入的构造函数
public JCalendar(GregorianCalendar calendar) {
cal = calendar;
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//带日期输入的构造函数
public JCalendar(Date date) {
cal.setTime(date);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//初始化组件
private void jbInit() throws Exception {
//初始化年、月、日
iniCalender();

this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createRaisedBevelBorder());
this.setMaximumSize(new Dimension(200, 200));
this.setMinimumSize(new Dimension(200, 200));
this.setPreferredSize(new Dimension(200, 200));

Main.setLayout(new BorderLayout());
Main.setBackground(SystemColor.info);
Main.setBorder(null);

Out.setBackground(Color.lightGray);
Out.setHorizontalAlignment(SwingConstants.CENTER);
Out.setMaximumSize(new Dimension(100, 19));
Out.setMinimumSize(new Dimension(100, 19));
Out.setPreferredSize(new Dimension(100, 19));

jLabel1.setForeground(Color.red);
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel1.setText("日");
jLabel2.setForeground(Color.blue);
jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel2.setText("六");
jLabel3.setHorizontalAlignment(SwingConstants.CENTER);
jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel3.setText("五");
jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel4.setText("四");
jLabel5.setHorizontalAlignment(SwingConstants.CENTER);
jLabel5.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel5.setText("三");
jLabel6.setBorder(null);
jLabel6.setHorizontalAlignment(SwingConstants.CENTER);
jLabel6.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel6.setText("二");
jLabel7.setBackground(Color.lightGray);
jLabel7.setForeground(Color.black);
jLabel7.setBorder(null);
jLabel7.setHorizontalAlignment(SwingConstants.CENTER);
jLabel7.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel7.setText("一");

weekPanel.setBackground(UIManager.getColor("InternalFrame.activeTitleGradient"));
weekPanel.setBorder(BorderFactory.createEtchedBorder());
weekPanel.setLayout(new GridLayout(1,7));
weekPanel.add(jLabel1, null);
weekPanel.add(jLabel7, null);
weekPanel.add(jLabel6, null);
weekPanel.add(jLabel5, null);
weekPanel.add(jLabel4, null);
weekPanel.add(jLabel3, null);
weekPanel.add(jLabel2, null);

MonthUp.setAlignmentX((float) 0.0);
MonthUp.setActionMap(null);

jPanelMonth.setBackground(SystemColor.info);
jPanelMonth.setLayout(new BorderLayout());
jPanelMonth.setBorder(BorderFactory.createEtchedBorder());


Month.setBorder(null);
Month.setHorizontalAlignment(SwingConstants.CENTER);
Month.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Month_mouseClicked(e);
}
});
Month.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(KeyEvent e) {
Month_keyPressed(e);
}
});

MonthDown.setBorder(null);
MonthDown.setText("\u25C4");
MonthDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
MonthDown_actionPerformed(e);
}
});
MonthUp.setBorder(null);
MonthUp.setText("\u25BA");
MonthUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
MonthUp_actionPerformed(e);
}
});


jPanelButton.setLayout(null);
jPanelButton.setBorder(null);
jPanelButton.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
jPanelButtonComponentResized(evt);
}
});

Year.setBorder(BorderFactory.createEtchedBorder());
Year.setMaximumSize(new Dimension(80, 25));
Year.setMinimumSize(new Dimension(80, 25));
Year.setPreferredSize(new Dimension(80, 25));
Year.setHorizontalAlignment(SwingConstants.CENTER);
Year.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Year_mouseClicked(e);
}
});
Year.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(KeyEvent e) {
Year_keyPressed(e);
}
});

YearDown.setBorder(null);
YearDown.setMaximumSize(new Dimension(16, 16));
YearDown.setMinimumSize(new Dimension(16, 16));
YearDown.setPreferredSize(new Dimension(16, 16));
YearDown.setSize(new Dimension(16, 16));
YearDown.setText("▼");
YearDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
YearDown_actionPerformed(e);
}
});
YearUp.setBorder(null);
YearUp.setMaximumSize(new Dimension(16, 16));
YearUp.setMinimumSize(new Dimension(16, 16));
YearUp.setPreferredSize(new Dimension(16, 16));
YearUp.setSize(new Dimension(16, 16));
YearUp.setText("▲");
YearUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
YearUp_actionPerformed(e);
}
});

jPanelDay.setLayout(new BorderLayout());

Days.setLayout(new GridLayout(6,7));
Days.setBackground(SystemColor.info);

for(int i=0;i<42;i++){
days[i]=new JToggleButton();
days[i].setBorder(null);
days[i].setBackground(SystemColor.info);
days[i].setHorizontalAlignment(SwingConstants.CENTER);
days[i].setHorizontalTextPosition(SwingConstants.CENTER);
//days[i].setSize(l,l);
days[i].addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e) {
day=Integer.parseInt(((JToggleButton)e.getSource()).getText());
showDate();
showDays();
}
});
Days.add(days[i]);
}

this.add(Main, BorderLayout.NORTH);
this.add(jPanelDay, BorderLayout.CENTER);
this.add(jPanelMonth, BorderLayout.SOUTH);

Main.add(Year, BorderLayout.CENTER);
Main.add(Out, BorderLayout.WEST);
Main.add(jPanelButton, BorderLayout.EAST);

jPanelButton.add(YearUp);
jPanelButton.add(YearDown);

jPanelDay.add(weekPanel,BorderLayout.NORTH);
jPanelDay.add(Days, BorderLayout.CENTER);

jPanelMonth.add(Month, BorderLayout.CENTER);
jPanelMonth.add(MonthDown, BorderLayout.WEST);
jPanelMonth.add(MonthUp, BorderLayout.EAST);

showMonth();
showYear();
showDate();
showDays();
}

//自定义重画年选择面板
void jPanelButtonComponentResized(java.awt.event.ComponentEvent evt){
YearUp.setLocation(0,0);
YearDown.setLocation(0,YearUp.getHeight());
jPanelButton.setSize(YearUp.getWidth(),YearUp.getHeight()*2);
jPanelButton.setPreferredSize(new Dimension(YearUp.getWidth(),YearUp.getHeight()*2));
jPanelButton.updateUI();
}

//测试用
public static void main(String[] args){
JFrame f=new JFrame();
f.setContentPane(new JCalendar());
f.pack();
//f.setResizable(false);
f.show();
}

//增加年份
void YearUp_actionPerformed(ActionEvent e) {
year++;
showYear();
showDate();
showDays();
}

//减少年份
void YearDown_actionPerformed(ActionEvent e) {
year--;
showYear();
showDate();
showDays();
}

//减少月份
void MonthDown_actionPerformed(ActionEvent e) {
month--;
if(month<0) {
month = 11;
year--;
showYear();
}
showMonth();
showDate();
showDays();
}

//增加月份
void MonthUp_actionPerformed(ActionEvent e) {
month++;
if(month==12) {
month=0;
year++;
showYear();
}
showMonth();
showDate();
showDays();
}

//初始化年月日
void iniCalender(){
year=cal.get(Calendar.YEAR);
month=cal.get(Calendar.MONTH);
day=cal.get(Calendar.DAY_OF_MONTH);
}

//刷新月份
void showMonth(){
Month.setText(Integer.toString(month+1)+"月");
}

//刷新年份
void showYear(){
Year.setText(Integer.toString(year)+"年");
}

//刷新日期
void showDate(){
Out.setText(Integer.toString(year)+"-"+Integer.toString(month+1)+"-"+Integer.toString(day));
}

//重画天数选择面板
void showDays() {
cal.set(year,month,1);
int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int n=mm[month];
if(cal.isLeapYear(year)&&month==1) n++;
int i=0;
for(;i<firstDayOfWeek-1;i++){
days[i].setEnabled(false);
days[i].setSelected(false);
days[i].setText("");
}
int d=1;
for(;d<=n;d++){
days[i].setText(Integer.toString(d));
days[i].setEnabled(true);
if(d==day) days[i].setSelected(true);
else days[i].setSelected(false);;
i++;
}
for(;i<42;i++){
days[i].setEnabled(false);
days[i].setSelected(false);
days[i].setText("");
}
}

//单击年份面板选择整个年份字符串
void SelectionYear(){
Year.setSelectionStart(0);
Year.setSelectionEnd(Year.getText().length());
}

//单击月份面板选择整个月份字符串
void SelectionMonth(){
Month.setSelectionStart(0);
Month.setSelectionEnd(Month.getText().length());
}

//月份面板响应鼠标单击事件
void Month_mouseClicked(MouseEvent e) {
//SelectionMonth();
inputMonth();
}

//检验输入的月份
void inputMonth(){
String s;
if(Month.getText().endsWith("月"))
{
s=Month.getText().substring(0,Month.getText().length()-1);
}
else s=Month.getText();
month=Integer.parseInt(s)-1;
this.showMe();
}

//月份面板键盘敲击事件响应
void Month_keyPressed(KeyEvent e) {
if(e.getKeyChar()==10)
inputMonth();
}

//年份面板响应鼠标单击事件
void Year_mouseClicked(MouseEvent e) {
//SelectionYear();
inputYear();
}

//年份键盘敲击事件响应
void Year_keyPressed(KeyEvent e) {
//System.out.print(new Integer(e.getKeyChar()).byteValue());
if(e.getKeyChar()==10)
inputYear();
}

//检验输入的年份字符串
void inputYear() {
String s;
if(Year.getText().endsWith("年"))
{
s=Year.getText().substring(0,Year.getText().length()-1);
}
else s=Year.getText();
year=Integer.parseInt(s);
this.showMe();
}

//以字符串形式返回日期,yyyy-mm-dd
public String getDate(){return Out.getText();}

//以字符串形式输入日期,yyyy-mm-dd
public void setDate(String date){
if(date!=null){
StringTokenizer f = new StringTokenizer(date, "-");
if(f.hasMoreTokens())
year = Integer.parseInt(f.nextToken());
if(f.hasMoreTokens())
month = Integer.parseInt(f.nextToken());
if(f.hasMoreTokens())
day = Integer.parseInt(f.nextToken());
cal.set(year,month,day);
}
this.showMe();
}

//以日期对象形式输入日期
public void setTime(Date date){
cal.setTime(date);
this.iniCalender();
this.showMe();
}

//返回日期对象
public Date getTime(){return cal.getTime();}

//返回当前的日
public int getDay() {
return day;
}

//设置当前的日
public void setDay(int day) {
this.day = day;
cal.set(this.year,this.month,this.day);
this.showMe();
}

//设置当前的年
public void setYear(int year) {
this.year = year;
cal.set(this.year,this.month,this.day);
this.showMe();
}

//返回当前的年
public int getYear() {
return year;
}

//返回当前的月
public int getMonth() {
return month;
}

//设置当前的月
public void setMonth(int month) {
this.month = month;
cal.set(this.year,this.month,this.day);
this.showMe();
}

//刷新
public void showMe(){
this.showDays();
this.showMonth();
this.showYear();
this.showDate();
}

}


public class TestJCalendar {
public static void main(String[] args) {
JFrame f=new JFrame();
f.setContentPane(new JCalendar());
f.pack();
//f.setResizable(false);
f.show();
}
}

分享到:
评论

相关推荐

    app 日历界面设计.zip

    在设计一个APP的日历界面时,有很多关键因素需要考虑,以确保用户友好性和功能性。"app 日历界面设计.zip"这个压缩包包含了名为"Free_calendar_app_psd_by__Ideawebme.psd"的设计文件,这很可能是为日历应用创建的...

    仿outlook NET日历界面

    Outlook是一款广泛使用的电子邮件和日历管理软件,其日历界面设计得既直观又高效,因此许多开发者希望在自己的应用程序中实现类似的用户体验。本项目就是针对这一需求,提供了.NET下的一个仿Outlook日历界面的实现,...

    简单日历界面

    "简单日历界面"项目提供了一个基本的日历功能实现,它包括了月份的转换以及更改日程显示的功能。这个项目可能是一个初学者学习编程或者用户界面设计的好起点,因为它涵盖了基础的日期处理和用户交互。 首先,我们要...

    用js实现的日历界面

    在本文中,我们将深入探讨如何使用JavaScript(js)来实现一个基本的日历界面。日历是Web应用中常见的功能,可以用于安排事件、记录日期等。JavaScript作为一种客户端脚本语言,能够动态更新网页内容,因此非常适合...

    java日历界面与功能

    java实现日历界面并完成功能:可以按年前后翻动;可以按月前后翻动,显示日历,周日显示红色,周六显示蓝色。

    java版日历,界面

    在Java编程领域,创建一...总的来说,这个Java日历界面项目涉及到了Java GUI编程、事件处理、日期和时间API的使用,以及可能的用户交互设计。掌握这些知识点对于任何想要开发桌面应用的Java程序员来说都是至关重要的。

    android自定义view之实现日历界面实例

    Android 自定义 View 实现日历界面实例 在 Android 开发中,自定义 View 是一种非常常见的技术,通过自定义 View,可以实现各种复杂的界面效果。在这里,我们将介绍如何实现一个日历界面实例,这个实例可以在 ...

    java日历有界面

    Java日历程序是一种基于Java编程语言开发的应用,它提供了用户友好的界面,使得用户能够查看日期、安排日程以及查看黄历。这个程序的核心功能包括日程提醒、黄历显示、月份翻页以及年月组合的日历视图。在描述中提到...

    qt做一个带有日历和钟表的界面

    在本文中,我们将深入探讨如何使用Qt框架创建一个带有日历和钟表的用户界面。Qt是一个跨平台的C++库,提供了丰富的图形用户界面工具,使得开发者能够轻松构建美观且功能强大的应用。 首先,我们要关注的核心是"qt...

    微信小程序自定义可滑动日历界面

    微信小程序自定义可滑动日历界面知识点详解: 1. 微信小程序日历界面概述: 微信小程序的日历界面是用户在使用微信内置的小程序功能时,经常需要与之交互的界面组件之一。它不仅可以展示日期信息,而且通常包含日期...

    jq实现简单的日历插件(兼容IE5)

    3)日历界面默认显示在当前时间界面 4)在日历中点击有内容的td,对应的日期值会显示在文本框中,而且日历隐藏 5)当点击今日时,日历列表显示当前时间界面,并且今日的时间显示在文本框中,日历界面隐藏 注: 功能...

    Calendar 仅修改界面的日历组件 delphi开发

    在本文中,我们将深入探讨如何使用Delphi进行日历组件的开发,特别是针对"Calendar 仅修改界面"的场景。Delphi是一款强大的Windows应用程序开发工具,以其高效的Object Pascal编程语言和丰富的组件库著称。在日历...

    calendaar.rar_labview 日历_labview日历_用LABVIEW做日历

    6. **用户界面设计**:LabVIEW提供了丰富的用户界面元素,可以设计出美观且功能完善的日历界面。开发者可能利用了LabVIEW的颜色、字体和布局工具来优化用户体验。 7. **错误处理**:在LabVIEW程序中,错误处理是...

    jq实现双日历

    说明: 1)js双日历选择,当结束日期大于开始日期时,文本框的颜色会变红,否则颜色正常 2)当文本框获得焦点时显示日历 3)日历界面默认显示在当前时间界面 4)在日历中点击有内容的td,对应的日期值会显示在文本框...

    用 js + html 实现一个网页版日历

    使用js + html 实现的简单的网页版日历,顶部默认会显示当前日期和时间,时间会精确到秒,并且时间会实时刷新,日历UI符合主流日历的样式,可以选择年,月,日查看每个月份的每一天对应星期几,默认显示当前日期所在...

    JAVA界面设计——日历篇(1JFrame窗口)

    创建日历界面时,我们可以选择使用`JPanel`作为基本的布局管理器,然后在其中放置代表月份和日期的组件。一种常见方法是使用网格布局(`GridLayout`),这样可以方便地排列出一个月的日期。每个日期可以表示为一个`...

    基于Java日历设计原代码

    1.系统界面显示当月日历、当前日期,当天日期用红色标记。 2.该日历可以按年份前后翻动,鼠标单击“上一年”按钮时,当前日历的年份减一;当鼠标左键单击“下一年”按钮,当前日历的年份加一。 3.该日历也可以在...

    超高仿华为日历功能,显示二十四节气和特殊节假日,日历可以伸缩。在此日历基础上可以实现备忘录等功能

    开发者需要处理网络请求,解析JSON或其他格式的数据,然后更新日历界面。 5. **备忘录功能**:在日历基础上添加备忘录功能需要创建一个新的数据模型来存储备忘录信息,同时提供添加、编辑和删除备忘录的界面。备忘...

    Android 使用RecycleView打造自定义日历

    在这个项目中,我们将会探讨如何使用RecycleView来打造一个自定义的日历界面,这将涉及到Android UI设计、自定义适配器以及事件处理等多个方面的知识。 首先,RecycleView的核心在于其强大的复用机制,通过视图池...

Global site tag (gtag.js) - Google Analytics