`
houzhe11
  • 浏览: 141701 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java的时间框架(对自己的项目有点用)

阅读更多
package com.daai.test;

import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import java.awt.Point;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

import javax.swing.JButton;

import com.daai.utils.DatePicker;

public class Time_test extends JDialog {

private static final long serialVersionUID = 1L;

private JPanel jContentPane = null;

private JTextField jTextField = null;

private JButton jButton = null;

/**
* @param owner
*/
public Time_test(Frame owner) {
super(owner);
initialize();
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton(), null);
}
return jContentPane;
}

/**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(17, 40, 133, 29));
}
return jTextField;
}

/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
Point origin = new Point();
private JDialog dlg;
private DatePicker dp;
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(165, 39, 89, 27));
jButton.setText("时间选择");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if ("".equals(jTextField.getText()))
                       
                        dp = new DatePicker();
                else
                        dp = new DatePicker(stringToDate(jTextField.getText()));
                dp.addComponentListener(new Listener());

                final Point p = jTextField.getLocationOnScreen();
                p.setLocation(p.getX(), p.getY() - 1 + jTextField.getSize().getHeight());

                dlg = new JDialog(new JFrame(), true);

                dlg.setTitle("选择时间");
                dlg.addMouseListener(new MouseAdapter() {
                        public void mousePressed(MouseEvent e) {
                                origin.x = e.getX();
                                origin.y = e.getY();
                        }
                });
                dlg.addMouseMotionListener(new MouseMotionAdapter() {
                        public void mouseDragged(MouseEvent e) {
                                Point p = dlg.getLocation();
                                dlg.setLocation(p.x + e.getX() - origin.x, p.y + e.getY() - origin.y);
                        }
                });

                dlg.setLocation(p);
                dlg.setResizable(false);
                dlg.setUndecorated(true);
                dlg.getContentPane().add(dp);
                dlg.pack();
                dlg.setVisible(true);

}
});
}
return jButton;
}
private static Date stringToDate(final String s) {
         try {
                 return DateFormat.getDateInstance(DateFormat.LONG).parse(s);
         } catch (ParseException e) {
                 return null;
         }
}
final class Listener extends ComponentAdapter {

         public void componentHidden(final ComponentEvent evt) {
                 final Date dt = ((DatePicker) evt.getSource()).getDate();
                 if (null != dt)
                         jTextField.setText(dateToString(dt));
                 dlg.dispose();
         }
         private  String dateToString(final Date dt) {
             if (null != dt)
                     return DateFormat.getDateInstance(DateFormat.LONG).format(dt);
             return null;
     }


}


}


上面是第一个类用来运行的,下面是第二个类

package com.daai.utils;

import java.awt.*;
import java.awt.event.*;
import java.util.GregorianCalendar;
import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.FieldPosition;

import javax.swing.*;
import javax.swing.plaf.BorderUIResource;


public final class DatePicker extends JPanel {

        private static final long serialVersionUID = 1L;

    private static final int startX = 10;

    private static final int startY = 60;

    private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10);

    private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12);

    private static final Insets insets = new Insets(2, 2, 2, 2);

    private static final Color highlight = new Color(255, 255, 204);

    private static final Color white = new Color(255, 255, 255);

    private static final Color gray = new Color(204, 204, 204);

    private Component selectedDay = null;

    private GregorianCalendar selectedDate = null;

    private GregorianCalendar originalDate = null;

    private boolean hideOnSelect = true;

    private final JButton backButton = new JButton();

    private final JLabel monthAndYear = new JLabel();

    private final JButton forwardButton = new JButton();

    private final JLabel[] dayHeadings = new JLabel[]{
        new JLabel("日"),
        new JLabel("一"),
        new JLabel("二"),
        new JLabel("三"),
        new JLabel("四"),
        new JLabel("五"),
        new JLabel("六")};

         private final JLabel[][] daysInMonth = new JLabel[][]{
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()},
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()},
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()},
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()},
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()},
                        {new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel(),
                         new JLabel()}
                    };

    private final JButton todayButton = new JButton();

    private final JButton cancelButton = new JButton();

    public DatePicker() {
        super();
        selectedDate = getToday();
        init();
    }

    public DatePicker(final Date initialDate) {
        super();
        if (null == initialDate)
            selectedDate = getToday();
        else
            (selectedDate = new GregorianCalendar()).setTime(initialDate);
        originalDate = new GregorianCalendar(
                selectedDate.get(Calendar.YEAR),
                selectedDate.get(Calendar.MONTH),
                selectedDate.get(Calendar.DATE));
        init();
    }

    public boolean isHideOnSelect() {
        return hideOnSelect;
    }

    public void setHideOnSelect(final boolean hideOnSelect) {
        if (this.hideOnSelect != hideOnSelect) {
            this.hideOnSelect = hideOnSelect;
            initButtons(false);
        }
    }

    public Date getDate() {
        if (null != selectedDate)
            return selectedDate.getTime();
        return null;
    }

    private void init() {
        setLayout(new AbsoluteLayout());
        this.setMinimumSize(new Dimension(161, 226));
        this.setMaximumSize(getMinimumSize());
        this.setPreferredSize(getMinimumSize());
        this.setBorder(new BorderUIResource.EtchedBorderUIResource());

        backButton.setFont(smallFont);
        backButton.setText("<");
        backButton.setMargin(insets);
        backButton.setDefaultCapable(false);
        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent evt) {
                onBackClicked(evt);
            }
        });
        add(backButton, new AbsoluteConstraints(10, 10, 20, 20));

        monthAndYear.setFont(largeFont);
        monthAndYear.setHorizontalAlignment(JTextField.CENTER);
        monthAndYear.setText(formatDateText(selectedDate.getTime()));
        add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20));

        forwardButton.setFont(smallFont);
        forwardButton.setText(">");
        forwardButton.setMargin(insets);
        forwardButton.setDefaultCapable(false);
        forwardButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent evt) {
                onForwardClicked(evt);
            }
        });
        add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20));

        int x = startX;
        for (int ii = 0; ii < dayHeadings.length; ii++) {
                        dayHeadings[ii].setOpaque(true);
            dayHeadings[ii].setBackground(Color.LIGHT_GRAY);
                        dayHeadings[ii].setForeground(Color.WHITE);
            dayHeadings[ii].setHorizontalAlignment(JLabel.CENTER);
            add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21));
            x += 20;
        }

        x = startX;
        int y = startY;
        for (int ii = 0; ii < daysInMonth.length; ii++) {
            for (int jj = 0; jj < daysInMonth[ii].length; jj++) {
                                daysInMonth[ii][jj].setOpaque(true);
                daysInMonth[ii][jj].setBackground(white);
                daysInMonth[ii][jj].setFont(smallFont);
                daysInMonth[ii][jj].setHorizontalAlignment(JLabel.CENTER);
                daysInMonth[ii][jj].setText("");
                daysInMonth[ii][jj].addMouseListener(new MouseAdapter() {
                    public void mouseClicked(final MouseEvent evt) {
                        onDayClicked(evt);
                    }
                });
                add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21));
                x += 20;
            }
            x = startX;
            y += 20;
        }

        initButtons(true);

        calculateCalendar();
    }

    private void initButtons(final boolean firstTime) {
        if (firstTime) {
            final Dimension buttonSize = new Dimension(68, 24);
            todayButton.setText("今天");
            todayButton.setMargin(insets);
            todayButton.setMaximumSize(buttonSize);
            todayButton.setMinimumSize(buttonSize);
            todayButton.setPreferredSize(buttonSize);
            todayButton.setDefaultCapable(true);
            todayButton.setSelected(true);
            todayButton.addActionListener(new ActionListener() {
                public void actionPerformed(final ActionEvent evt) {
                    onToday(evt);
                }
            });

            cancelButton.setText("取消");
            cancelButton.setMargin(insets);
            cancelButton.setMaximumSize(buttonSize);
            cancelButton.setMinimumSize(buttonSize);
            cancelButton.setPreferredSize(buttonSize);
            cancelButton.addActionListener(new ActionListener() {
                public void actionPerformed(final ActionEvent evt) {
                    onCancel(evt);
                }
            });
        } else {
            this.remove(todayButton);
            this.remove(cancelButton);
        }

        if (hideOnSelect) {
            add(todayButton, new AbsoluteConstraints(25, 190, 52, -1));
            add(cancelButton, new AbsoluteConstraints(87, 190, 52, -1));
        } else {
            add(todayButton, new AbsoluteConstraints(55, 190, 52, -1));
        }
    }

    private void onToday(final java.awt.event.ActionEvent evt) {
        selectedDate = getToday();
        setVisible(!hideOnSelect);
        if (isVisible()) {
            monthAndYear.setText(formatDateText(selectedDate.getTime()));
            calculateCalendar();
        }
    }

    private void onCancel(final ActionEvent evt) {
        selectedDate = originalDate;
        setVisible(!hideOnSelect);
    }

    private void onForwardClicked(final java.awt.event.ActionEvent evt) {
        final int day = selectedDate.get(Calendar.DATE);
        selectedDate.set(Calendar.DATE, 1);
        selectedDate.add(Calendar.MONTH, 1);
        selectedDate.set(Calendar.DATE,
                Math.min(day, calculateDaysInMonth(selectedDate)));
        monthAndYear.setText(formatDateText(selectedDate.getTime()));
        calculateCalendar();
    }

    private void onBackClicked(final java.awt.event.ActionEvent evt) {
        final int day = selectedDate.get(Calendar.DATE);
        selectedDate.set(Calendar.DATE, 1);
        selectedDate.add(Calendar.MONTH, -1);
        selectedDate.set(Calendar.DATE,
                Math.min(day, calculateDaysInMonth(selectedDate)));
        monthAndYear.setText(formatDateText(selectedDate.getTime()));
        calculateCalendar();
    }

    private void onDayClicked(final java.awt.event.MouseEvent evt) {
        final javax.swing.JLabel fld = (javax.swing.JLabel) evt.getSource();
        if (!"".equals(fld.getText())) {
            fld.setBackground(highlight);
            selectedDay = fld;
            selectedDate.set(
                    Calendar.DATE,
                    Integer.parseInt(fld.getText()));
            setVisible(!hideOnSelect);
        }
    }

    private static GregorianCalendar getToday() {
        final GregorianCalendar gc = new GregorianCalendar();
        gc.set(Calendar.HOUR_OF_DAY, 0);
        gc.set(Calendar.MINUTE, 0);
        gc.set(Calendar.SECOND, 0);
        gc.set(Calendar.MILLISECOND, 0);
        return gc;
    }

    private void calculateCalendar() {
        if (null != selectedDay) {
            selectedDay.setBackground(white);
            selectedDay = null;
        }

        final GregorianCalendar c = new GregorianCalendar(
                selectedDate.get(Calendar.YEAR),
                selectedDate.get(Calendar.MONTH),
                1);

        final int maxDay = calculateDaysInMonth(c);

        final int selectedDay = Math.min(maxDay, selectedDate.get(
                Calendar.DATE));

        int dow = c.get(Calendar.DAY_OF_WEEK);
        for (int dd = 0; dd < dow; dd++) {
            daysInMonth[0][dd].setText("");
        }

        int week;
        do {
            week = c.get(Calendar.WEEK_OF_MONTH);
            dow = c.get(Calendar.DAY_OF_WEEK);
            final JLabel fld = this.daysInMonth[week - 1][dow - 1];
            fld.setText(Integer.toString(c.get(Calendar.DATE)));
            if (selectedDay == c.get(Calendar.DATE)) {
                fld.setBackground(highlight);
                this.selectedDay = fld;
            }
            if (c.get(Calendar.DATE) >= maxDay)
                break;
            c.add(Calendar.DATE, 1);
        } while (c.get(Calendar.DATE) <= maxDay);

        week--;
        for (int ww = week; ww < daysInMonth.length; ww++) {
            for (int dd = dow; dd < daysInMonth[ww].length; dd++) {
                daysInMonth[ww][dd].setText("");
            }
            dow = 0;
        }

        c.set(Calendar.DATE, selectedDay);
        selectedDate = c;
    }

    private static int calculateDaysInMonth(final Calendar c) {
        int daysInMonth = 0;
        switch (c.get(Calendar.MONTH)) {
            case 0:
            case 2:
            case 4:
            case 6:
            case 7:
            case 9:
            case 11:
                daysInMonth = 31;
                break;
            case 3:
            case 5:
            case 8:
            case 10:
                daysInMonth = 30;
                break;
            case 1:
                final int year = c.get(Calendar.YEAR);
                daysInMonth =
                        (0 == year % 1000) ? 29 :
                        (0 == year % 100) ? 28 :
                        (0 == year % 4) ? 29 : 28;
                break;
        }
        return daysInMonth;
    }

    private static String formatDateText(final Date dt) {
        final DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);

        final StringBuffer mm = new StringBuffer();
        final StringBuffer yy = new StringBuffer();
        final FieldPosition mmfp = new FieldPosition(DateFormat.MONTH_FIELD);
        final FieldPosition yyfp = new FieldPosition(DateFormat.YEAR_FIELD);
        df.format(dt, mm, mmfp);
        df.format(dt, yy, yyfp);
        return (mm.toString().substring(mmfp.getBeginIndex(), mmfp.getEndIndex()) +
                "月 " + yy.toString().substring(yyfp.getBeginIndex(), yyfp.getEndIndex()) + "年");
    }

}


分享到:
评论

相关推荐

    java+大数据相关框架实战项目(Hadoop, Spark, Storm, Flink).zip

    这个名为"java+大数据相关框架实战项目(Hadoop, Spark, Storm, Flink).zip"的压缩包文件,包含了四个核心的大数据处理框架——Hadoop、Spark、Storm和Flink的实战项目源码,这些框架都是Java开发的,用于解决大规模...

    总结Java部分的框架和开源项目.pdf

    Java作为一门广泛使用的编程语言,其生态系统包含众多框架和开源项目。以下是对Java框架和开源项目进行的总结,其中涵盖了不同的应用层面和功能特性,使得Java开发者在构建应用程序时有了丰富的选择和工具。 1. ...

    java迷你框架附使用例程

    通过学习这个迷你框架及其使用例程,Java开发者可以掌握轻量级框架的基本原理和实践,提升其在项目中的应用能力。对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者来说,研究这种框架可以帮助他们了解...

    java基本框架

    Java基本框架是构建高效、可扩展且易于维护的Java应用程序的核心工具。...通过深入研究这个"java基本框架"压缩包,开发者将能够提升自己的Java开发能力和项目管理能力,为构建复杂的企业级应用打下坚实基础。

    一个java tcp服务器的基础框架

    Java TCP服务器基础框架详解 在Java编程中,TCP(Transmission Control Protocol)服务器是网络通信的基础,用于实现客户端与服务器之间的可靠数据传输。本框架提供了一个简单的起点,帮助开发者快速搭建自己的TCP...

    java三大框架

    比如, Enterprise Java-Beans (EJB) container或者 Servlet engine 而这些框架一般在中小工程中我们都不会使用,会让我们把大量的时间浪费在开发框架上。 而现在比较流行开源框架,主要是struts,hibernate,spring等...

    java框架在线生成

    1. **快速启动项目**:通过在线生成工具,可以在几分钟内搭建起一个基础的Java项目框架,避免了手动创建项目所需的时间和精力。 2. **标准化代码结构**:自动生成的框架遵循了一定的设计模式和编码规范,有助于保持...

    一份从0到1的java项目实践清单

    "一份从0到1的java项目实践清单" 本文主要是关于 Java 项目实践的经验总结,...本文对 Java 项目实践的经验总结,涵盖了项目规划、框架规划及搭建、开发环境的搭建等多个方面,为 Java 开发者提供了实践的经验和指导。

    Java微信开发框架

    Java微信开发框架对微信官方提供的各类API进行了封装,包括但不限于用户管理(如用户关注、取消关注事件处理)、消息处理(文本、图片、语音等消息的接收与响应)、菜单创建与管理、支付接口集成、小程序接口调用等...

    java开源框架下载集合

    ### Java开源框架下载集合 在Java开发领域,开源框架的应用极大地提升了软件开发的效率与质量。本文将基于提供的部分开源框架资源,详细阐述这些...对于Java开发者而言,熟悉并掌握这些框架的使用方法是非常有益的。

    JAVA三大框架帮助文档大全

    Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过Hibernate,开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL语句。实体类对应数据库表,实体类的属性对应表的字段...

    Java_TechEmpower框架基准项目的源代码.zip

    文件列表中的`FrameworkBenchmarks_master.zip`可能包含了项目的历史版本,这对于理解框架性能随时间的变化以及不同版本之间的差异很有帮助。 总的来说,Java_TechEmpower框架基准项目不仅是评估Web框架性能的重要...

    轻量级的java数据源jdbc框架

    该框架的设计目标是小巧且侵入性低,这意味着它不会对现有的项目结构产生过大影响,易于集成到任何已有的 Java 框架中,如 Spring、Struts 或者 Hibernate。开发者只需要简单地引入依赖,配置数据源参数,就可以快速...

    SSM框架搭建实例

    这个"ssm_proj"实例是一个可编译、可运行的项目模板,开发者可以直接在此基础上进行业务开发,无需从零开始搭建基础框架,大大节省了项目初期的时间成本。对于初学者来说,通过研究这个实例,可以更好地理解SSM框架...

    简单java web框架

    Java Web框架是开发基于Java平台的Web应用程序的强大工具,它们为开发者提供了许多便利,简化了开发流程。在“简单java web框架”这个主题中,我们主要关注的是Spring、Struts和MyBatis这三个核心组件,它们是Java ...

    java框架代码

    Java框架代码是软件开发中非常重要的组成部分,它们提供了一种标准化的方式来组织和执行常见的编程任务,...通过学习和理解这些框架中对这些数据结构的应用,开发者能够更好地掌握Java框架的精髓,提升自己的编程技能。

    SSM-空框架-java

    在这个"SSM-空框架-java"项目中,开发者已经搭建了一个基础的SSM框架,方便其他开发者直接在此基础上进行开发,节省了初始化项目的宝贵时间。 首先,让我们深入理解一下SSM框架的各个组成部分: 1. **Spring MVC**...

    java项目经验 大概有20个

    这些项目经验反映了开发者在Java企业级应用开发中的广泛技能,包括框架应用、数据库设计、通信协议、用户界面开发、多线程处理、数据导入导出、性能优化等方面。这种全面的经验对于任何Java开发者的简历都是极其宝贵...

    Java常用开源框架总结.docx

    Lang 提供了一系列对 Java `java.lang` 包的扩展,包括字符串处理、日期时间操作、反射辅助类以及枚举支持等。例如,`StringUtils` 提供了丰富的字符串操作方法,而 `ClassUtils` 可以帮助处理类和对象之间的关系。...

Global site tag (gtag.js) - Google Analytics