解决方案 »

  1.   

    是swing的吗?你找个日历控件不就可以了吗
      

  2.   

    效果图来一张:点击笑脸按钮出来选择日期框,选好了,日期就在文本框里面显示了。    下面上代码:二个文件DatePicker.java DateSelect.java,一个引用================================================================DatePicker.javapackage date;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;
    import org.netbeans.lib.awtextra.AbsoluteConstraints;
    import org.netbeans.lib.awtextra.AbsoluteLayout;/**
    *
    * @author Administrator
    */
    public 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);
        }
      

  3.   

        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()) + "年");
        }
    }=============================================================================DateSelect.javapackage date;import java.awt.Point;
    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.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JTextField;/*****************************
    *日期组件的应用
    *按钮接口**************************/
    public class DateSelect {
          private JDialog dlg;
         private DatePicker dp;
         Point origin = new Point();
         private JTextField datetext;     //接口setdatetext
         public void setdatetext(JTextField text){         this.datetext=text;
         }      public void onButtonClick(final java.awt.event.ActionEvent evt) {
            if ("".equals(datetext.getText())) {
                dp = new DatePicker();
            } else {
                dp = new DatePicker(stringToDate(datetext.getText()));
            }
           dp.addComponentListener(new Listener());        final Point p = datetext.getLocationOnScreen();
            p.setLocation(p.getX(), p.getY() - 1 + datetext.getSize().getHeight());        dlg = new JDialog(new JFrame(), true);
            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);
        }
        final class Listener extends ComponentAdapter {
          public void componentHidden(final ComponentEvent evt) {
                final Date dt = ((DatePicker) evt.getSource()).getDate();
                if (null != dt) {
                    datetext.setText(dateToString(dt));
                }
                dlg.dispose();        }
        }      public Date getDate() {
            return stringToDate(datetext.getText());
        }    public void setDate(Date date) {
            String v = dateToString(date);
            if (v == null) {
                v = "";
            }
            datetext.setText(v);
        }     private static String dateToString(final Date dt) {
            if (null != dt) {
                return DateFormat.getDateInstance(DateFormat.LONG).format(dt);
            }
            return null;
        }    private static Date stringToDate(final String s) {
            try {
                return DateFormat.getDateInstance(DateFormat.LONG).parse(s);
            } catch (ParseException e) {
                return null;
            }
        }}==============================================================
    是swing    我加的上面的代码 提示找不到
    import org.netbeans.lib.awtextra.AbsoluteConstraints;
    import org.netbeans.lib.awtextra.AbsoluteLayout;
    这两个不知道怎么弄修改
      

  4.   

    这个网址的代码,我加进去的。http://blog.chinaunix.net/uid-21227800-id-65830.html