选择显示字体大小

改写的基于swing的日期选择控件

http://www.matrix.org.cn/blog/liu2liu2

上次公司需要,搞了一个swing的aapplication的demo,重新弄了一般swing,可惜最后无疾而终,可悲.....
最近离职,把以前的东西整理了一下,觉得多少有点用处,写下算是悼念吧!
这是其中日期选择控件的代码,改编自网上某个程序(记不得了),界面如下所示:



源代码:
//datepicker.java
package com.kxsoft.component;

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(&quot;<&quot;);
        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(&quot;>&quot;);
        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(&quot;&quot;);
                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(&quot;今天&quot;);
            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(&quot;取消&quot;);
            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 (!&quot;&quot;.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(&quot;&quot;);
        }

        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(&quot;&quot;);
            }
            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()) +
                &quot;月 &quot; + yy.tostring().substring(yyfp.getbeginindex(), yyfp.getendindex()) + &quot;年&quot;);
    }

}
</pre>
</code>

<code>
<pre class=&quot;js src&quot;>
//datafield.java
package com.kxsoft.component;

import java.awt.borderlayout;
import java.awt.color;
import java.awt.insets;
import java.awt.point;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
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.net.url;
import java.text.dateformat;
import java.text.parseexception;
import java.util.date;

import javax.swing.imageicon;
import javax.swing.jbutton;
import javax.swing.jdialog;
import javax.swing.jframe;
import javax.swing.jpanel;
import javax.swing.jtextfield;

public final class datefield extends jpanel {

        private static final long serialversionuid = 1l;

        private final jtextfield datetext = new jtextfield(12);

        private final jbutton dropdownbutton = new jbutton();

        private datepicker dp;

        private jdialog dlg;

        point origin = new point();

        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 datefield() {
                super();
                init();
        }

        public datefield(final date initialdate) {
                super();
                init();
                datetext.settext(datetostring(initialdate));
        }

        public date getdate() {
                return stringtodate(datetext.gettext());
        }

        public void setdate(date date) {
                string v = datetostring(date);
                if (v == null) {
                        v = &quot;&quot;;
                }
                datetext.settext(v);
        }

        private void init() {
                setlayout(new borderlayout());

                datetext.settext(&quot;&quot;);
                datetext.seteditable(false);
                datetext.setbackground(new color(255, 255, 255));
                add(datetext, borderlayout.center);

                url url = datefield.class.getresource(&quot;/com/kxsoft/component/dropdown.gif&quot;);
                imageicon icon = new imageicon(url);
                dropdownbutton.seticon(icon);
                dropdownbutton.setmargin(new insets(2, 2, 2, 2));
                dropdownbutton.addactionlistener(new actionlistener() {
                        public void actionperformed(final actionevent evt) {
                                onbuttonclick(evt);
                        }
                });
                add(dropdownbutton, borderlayout.east);
        }

        private void onbuttonclick(final java.awt.event.actionevent evt) {
                if (&quot;&quot;.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);
        }

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

        public static void main(string[] args) {
                jdialog dlg = new jdialog(new jframe(), true);
                datefield df = new datefield();
                dlg.getcontentpane().add(df);
                dlg.pack();
                dlg.setvisible(true);
                system.out.println(df.getdate().tostring());
                system.exit(0);
        }
}


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons