zoukankan      html  css  js  c++  java
  • java 日历编写代码

     //Jcalendar.java

    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();
    }
    }


    测试代码

            JFrame f=new JFrame();
            f.setContentPane(new JCalendar());
            f.pack();
            //f.setResizable(false);
           // f.show();
            f.setVisible(true); 

  • 相关阅读:
    C# winform 学习(三)
    (Java实现) 均分纸牌
    (Java实现) 拦截导弹
    Delphi从内存流中判断图片格式(好多相关文章)
    Qt之QTableView显示富文本(使用了QAbstractTextDocumentLayout和QTextDocument)
    MAC和PHY的区别(网线上传递的是模拟信号)
    Qt之模型/视图(自定义按钮)(重绘QStyleOptionButton)
    QQ音乐的请求
    Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
    LRU Cache
  • 原文地址:https://www.cnblogs.com/likwo/p/1728203.html
Copyright © 2011-2022 走看看