﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Hey,buddy:What's up?-随笔分类-J2EE</title><link>http://www.blogjava.net/kuntao/category/4037.html</link><description>Happy&amp;Optimistic&amp;Effective</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:42:52 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:42:52 GMT</pubDate><ttl>60</ttl><item><title>改写的日期选择器</title><link>http://www.blogjava.net/kuntao/archive/2006/04/27/43560.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Thu, 27 Apr 2006 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/kuntao/archive/2006/04/27/43560.html</guid><wfw:comment>http://www.blogjava.net/kuntao/comments/43560.html</wfw:comment><comments>http://www.blogjava.net/kuntao/archive/2006/04/27/43560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuntao/comments/commentRss/43560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuntao/services/trackbacks/43560.html</trackback:ping><description><![CDATA[
		<p>本程序改变自网上的一个datapicker，没有用javax包，而是基于java.awt包。you can use it in your applet.共四个文件。<br /><br />//1.AbsoluteConstraints.java<br /><br />import java.awt.Dimension;<br />import java.awt.Point;</p>
		<p>public class AbsoluteConstraints<br />    implements java.io.Serializable {<br />  static final long serialVersionUID = 5261460716622152494L;<br />  public int x;<br />  public int y;<br />  public int width = -1;<br />  public int height = -1;<br />  public AbsoluteConstraints(Point pos) {<br />    this(pos.x, pos.y);<br />  }</p>
		<p>  public AbsoluteConstraints(int x, int y) {<br />    this.x = x;<br />    this.y = y;<br />  }</p>
		<p>  public AbsoluteConstraints(Point pos, Dimension size) {<br />    this.x = pos.x;<br />    this.y = pos.y;<br />    if (size != null) {<br />      this.width = size.width;<br />      this.height = size.height;<br />    }<br />  }</p>
		<p>  public AbsoluteConstraints(int x, int y, int width, int height) {<br />    this.x = x;<br />    this.y = y;<br />    this.width = width;<br />    this.height = height;<br />  }</p>
		<p>  public int getX() {<br />    return x;<br />  }</p>
		<p>  public int getY() {<br />    return y;<br />  }</p>
		<p>  public int getWidth() {<br />    return width;<br />  }</p>
		<p>  public int getHeight() {<br />    return height;<br />  }</p>
		<p>  public String toString() {<br />    return super.toString() + " [x=" + x + ", y=" + y + ", width=" + width +<br />        ", height=" + height + "]";<br />  }<br />}<br /><br /><br /><br />//2.import java.awt.*;</p>
		<p>public class AbsoluteLayout<br />    implements LayoutManager2, java.io.Serializable {<br />  static final long<br />      serialVersionUID = -1919857869177070440L;<br />  protected java.util.Hashtable constraints = new java.util.Hashtable();<br />  public<br />      void addLayoutComponent(String name, Component comp) {<br />    throw new IllegalArgumentException();<br />  }</p>
		<p>  public void<br />      removeLayoutComponent(Component comp) {<br />    constraints.remove(comp);<br />  }</p>
		<p>  public Dimension preferredLayoutSize<br />      (Container parent) {<br />    int maxWidth = 0;<br />    int maxHeight = 0;<br />    for (java.util.Enumeration e =<br />         constraints.keys(); e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints<br />          ac = (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getPreferredSize();<br />      int width =<br />          ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      if (ac.x + width &gt; maxWidth)<br />        maxWidth = ac.x + width;<br />      if (ac.y + height &gt;<br />          maxHeight)<br />        maxHeight = ac.y + height;<br />    }<br />    return new Dimension(maxWidth, maxHeight);<br />  }</p>
		<p>  public<br />      Dimension minimumLayoutSize(Container parent) {<br />    int maxWidth = 0;<br />    int maxHeight = 0;<br />    for<br />        (java.util.Enumeration e = constraints.keys(); e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints ac = (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getMinimumSize();<br />      int width = ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      if (ac.x + width &gt; maxWidth)<br />        maxWidth = ac.x + width;<br />      if<br />          (ac.y + height &gt; maxHeight)<br />        maxHeight = ac.y + height;<br />    }<br />    return new Dimension(maxWidth, maxHeight);<br />  }</p>
		<p>  public void layoutContainer(Container parent) {<br />    for (java.util.Enumeration e = constraints.keys();<br />         e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints ac =<br />          (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getPreferredSize();<br />      int width = ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      comp.setBounds(ac.x, ac.y, width, height);<br />    }<br />  }</p>
		<p>  public void addLayoutComponent<br />      (Component comp, Object constr) {<br />    if (! (constr instanceof AbsoluteConstraints))<br />      throw new<br />          IllegalArgumentException();<br />    constraints.put(comp, constr);<br />  }</p>
		<p>  public Dimension maximumLayoutSize(Container<br />                                     target) {<br />    return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);<br />  }</p>
		<p>  public float getLayoutAlignmentX<br />      (Container target) {<br />    return 0;<br />  }</p>
		<p>  public float getLayoutAlignmentY(Container target) {<br />    return 0;<br />  }</p>
		<p>  public void invalidateLayout(Container target) {}<br />}<br /><br />// 3DateField.java<br /><br />import java.awt.BorderLayout;<br />import java.awt.Color;<br />import java.awt.Insets;<br />import java.awt.Point;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.awt.event.ComponentAdapter;<br />import java.awt.event.ComponentEvent;<br />import java.awt.event.MouseAdapter;<br />import java.awt.event.MouseEvent;<br />import java.awt.event.MouseMotionAdapter;<br />import java.net.URL;<br />import java.text.DateFormat;<br />import java.text.ParseException;<br />import java.util.Date;<br />import java.awt.*;</p>
		<p>public final class DateField<br />    extends Panel {<br />  private static final long serialVersionUID = 1L;<br />  private final TextField dateText = new TextField(12);<br />  private final Button dropdownButton = new Button();<br />  private DatePicker dp;<br />  private Dialog dlg;<br />  Point origin = new Point();<br />  final class Listener<br />      extends ComponentAdapter {<br />    public void componentHidden(final ComponentEvent evt) {<br />      final Date dt = ( (DatePicker) evt.getSource()).getDate();<br />      if (null != dt)<br />        dateText.setText(dateToString(dt));<br />      dlg.dispose();<br />    }<br />  }</p>
		<p>  public DateField() {<br />    super();<br />    init();<br />  }</p>
		<p>  public DateField(final Date initialDate) {<br />    super();<br />    init();<br />    dateText.setText(dateToString(initialDate));<br />  }</p>
		<p>  public Date getDate() {<br />    return stringToDate(dateText.getText());<br />  }</p>
		<p>  public void setDate(Date date) {<br />    String v = dateToString(date);<br />    if (v == null) {<br />      v = "";<br />    }<br />    dateText.setText(v);<br />  }</p>
		<p>  private void init() {<br />    setLayout(new BorderLayout());<br />    dateText.setText("");<br />    dateText.setEditable(false);<br />    dateText.setBackground(new Color(255, 255, 255));<br />    add(dateText, BorderLayout.CENTER);<br />    dropdownButton.setLabel("选择");<br />    dropdownButton.setBackground(Color.yellow);<br />    dropdownButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onButtonClick(evt);<br />      }<br />    });<br />    add(dropdownButton, BorderLayout.EAST);<br />  }</p>
		<p>  private void onButtonClick(final java.awt.event.ActionEvent evt) {<br />    if ("".equals(dateText.getText()))<br />      dp = new DatePicker();<br />    else<br />      dp = new DatePicker(stringToDate(dateText.getText()));<br />    dp.addComponentListener(new Listener());<br />    final Point p = dateText.getLocationOnScreen();<br />    p.setLocation(p.getX(), p.getY() - 1 + dateText.getSize().getHeight());<br />    dlg = new Dialog(new Frame(), true);<br />    dlg.addMouseListener(new MouseAdapter() {<br />      public void mousePressed(MouseEvent e) {<br />        origin.x = e.getX();<br />        origin.y = e.getY();<br />      }<br />    });<br />    dlg.addMouseMotionListener(new MouseMotionAdapter() {<br />      public void mouseDragged(MouseEvent e) {<br />        Point p = dlg.getLocation();<br />        dlg.setLocation(p.x + e.getX() - origin.x, p.y + e.getY() - origin.y);<br />      }<br />    });<br />    dlg.setLocation(p);<br />    dlg.setResizable(false);<br />    dlg.setUndecorated(true);<br />    dlg.add(dp);<br />    dlg.pack();<br />    dlg.setVisible(true);<br />  }</p>
		<p>  private static String dateToString(final Date dt) {<br />    if (null != dt)<br />      return DateFormat.getDateInstance(DateFormat.LONG).format(dt);<br />    return null;<br />  }</p>
		<p>  private static Date stringToDate(final String s) {<br />    try {<br />      return DateFormat.getDateInstance(DateFormat.LONG).parse(s);<br />    }<br />    catch (ParseException e) {<br />      return null;<br />    }<br />  }</p>
		<p>  public static void main(String[] args) {<br />    Dialog dlg = new Dialog(new Frame(), true);<br />    DateField df = new DateField();<br />   //dlg.getContentPane().add(df);<br />   dlg.add(df);<br />    dlg.pack();<br />    dlg.setVisible(true);<br />    System.out.println(df.getDate().toString());<br />    System.exit(0);<br />  }<br />}<br /><br />//4.DatePicker.java<br /><br />import java.awt.*;<br />import java.awt.event.*;<br />import java.util.GregorianCalendar;<br />import java.util.Date;<br />import java.util.Calendar;<br />import java.text.DateFormat;<br />import java.text.FieldPosition;<br />/*<br />import javax.swing.*;<br />import javax.swing.plaf.BorderUIResource;<br />*/<br />public final class DatePicker<br />    extends Panel {<br />  private static final long serialVersionUID = 1L;<br />  private static final int startX = 10;<br />  private static final int startY = 60;<br />  private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10);<br />  private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12);<br />  private static final Insets insets = new Insets(2, 2, 2, 2);<br />  private static final Color highlight = Color.YELLOW;//new Color(255, 255, 204);<br />  private static final Color white = new Color(255, 255, 255);<br />  private static final Color gray = new Color(204, 204, 204);<br />  private Component selectedDay = null;<br />  private GregorianCalendar selectedDate = null;<br />  private GregorianCalendar originalDate = null;<br />  private boolean hideOnSelect = true;<br />  private final Button backButton = new Button();<br />  private final Label monthAndYear = new Label();<br />  private final Button forwardButton = new Button();<br />  private final Label[] dayHeadings = new Label[] {<br />      new Label("日"),<br />      new Label("一"),<br />      new Label("二"),<br />      new Label("三"),<br />      new Label("四"),<br />      new Label("五"),<br />      new Label("六")};</p>
		<p>  private final Label[][] daysInMonth = new Label[][] {<br />      {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />      , {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />      , {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />  };<br />  private final Button todayButton = new Button();<br />  private final Button cancelButton = new Button();<br />  public DatePicker() {<br />    super();<br />    selectedDate = getToday();<br />    init();<br />  }</p>
		<p>  public DatePicker(final Date initialDate) {<br />    super();<br />    if (null == initialDate)<br />      selectedDate = getToday();<br />    else<br />      (selectedDate = new GregorianCalendar()).setTime(initialDate);<br />    originalDate = new GregorianCalendar(selectedDate.get(Calendar.YEAR),<br />                                         selectedDate.get(Calendar.MONTH),<br />                                         selectedDate.get(Calendar.DATE));<br />    init();<br />  }</p>
		<p>  public boolean isHideOnSelect() {<br />    return hideOnSelect;<br />  }</p>
		<p>  public void setHideOnSelect(final boolean hideOnSelect) {<br />    if (this.hideOnSelect != hideOnSelect) {<br />      this.hideOnSelect = hideOnSelect;<br />      initButtons(false);<br />    }<br />  }</p>
		<p>  public Date getDate() {<br />    if (null != selectedDate)<br />      return selectedDate.getTime();<br />    return null;<br />  }</p>
		<p>  private void init() {<br />    setLayout(new AbsoluteLayout());<br />    /*<br />    this.setMinimumSize(new Dimension(161, 226));<br />    this.setMaximumSize(getMinimumSize());<br />    this.setPreferredSize(getMinimumSize());<br />    this.setBorder(new BorderUIResource.EtchedBorderUIResource());<br />    */<br />   this.setSize(new Dimension(161, 226));<br />    backButton.setFont(smallFont);<br />    backButton.setLabel("&lt;");<br />  //  backButton.setSize(insets);<br /> //   backButton.setDefaultCapable(false);<br />    backButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onBackClicked(evt);<br />      }<br />    });<br />    add(backButton, new AbsoluteConstraints(10, 10, 20, 20));<br />    monthAndYear.setFont(largeFont);<br />    monthAndYear.setAlignment((int)TextField.CENTER_ALIGNMENT);<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20));<br />    forwardButton.setFont(smallFont);<br />    forwardButton.setLabel("&gt;");<br /> //   forwardButton.setMargin(insets);<br />//    forwardButton.setDefaultCapable(false);<br />    forwardButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onForwardClicked(evt);<br />      }<br />    });<br />    add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20));<br />    int x = startX;<br />    for (int ii = 0; ii &lt; dayHeadings.length; ii++) {<br />    //  dayHeadings[ii].setOpaque(true);<br />      dayHeadings[ii].setBackground(Color.LIGHT_GRAY);<br />      dayHeadings[ii].setForeground(Color.WHITE);<br />      dayHeadings[ii].setAlignment((int)TextField.CENTER_ALIGNMENT);<br />    //  dayHeadings[ii].setHorizontalAlignment(Label.CENTER);<br />      add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21));<br />      x += 20;<br />    }<br />    x = startX;<br />    int y = startY;<br />    for (int ii = 0; ii &lt; daysInMonth.length; ii++) {<br />      for (int jj = 0; jj &lt; daysInMonth[ii].length; jj++) {<br />      //  daysInMonth[ii][jj].setOpaque(true);<br />        daysInMonth[ii][jj].setBackground(white);<br />        daysInMonth[ii][jj].setFont(smallFont);<br />     //   daysInMonth[ii][jj].setHorizontalAlignment(Label.CENTER);<br />        daysInMonth[ii][jj].setText("");<br />        daysInMonth[ii][jj].addMouseListener(new MouseAdapter() {<br />          public void mouseClicked(final MouseEvent evt) {<br />            onDayClicked(evt);<br />          }<br />        });<br />        add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21));<br />        x += 20;<br />      }<br />      x = startX;<br />      y += 20;<br />    }<br />    initButtons(true);<br />    calculateCalendar();<br />  }</p>
		<p>  private void initButtons(final boolean firstTime) {<br />    if (firstTime) {<br />      final Dimension buttonSize = new Dimension(68, 24);<br />      todayButton.setLabel("今天");<br />      todayButton.setSize(buttonSize);<br />      /*<br />      todayButton.setMargin(insets);<br />      todayButton.setMaximumSize(buttonSize);<br />      todayButton.setMinimumSize(buttonSize);<br />      todayButton.setPreferredSize(buttonSize);<br />      todayButton.setDefaultCapable(true);<br />      todayButton.setSelected(true);<br />      */<br />      todayButton.addActionListener(new ActionListener() {<br />        public void actionPerformed(final ActionEvent evt) {<br />          onToday(evt);<br />        }<br />      });<br />      cancelButton.setLabel("取消");<br />      cancelButton.setSize(buttonSize);<br />      /*<br />      cancelButton.setMargin(insets);<br />      cancelButton.setMaximumSize(buttonSize);<br />      cancelButton.setMinimumSize(buttonSize);<br />      cancelButton.setPreferredSize(buttonSize);<br />      */<br />      cancelButton.addActionListener(new ActionListener() {<br />        public void actionPerformed(final ActionEvent evt) {<br />          onCancel(evt);<br />        }<br />      });<br />    }<br />    else {<br />      this.remove(todayButton);<br />      this.remove(cancelButton);<br />    }<br />    if (hideOnSelect) {<br />      add(todayButton, new AbsoluteConstraints(25, 190, 52, -1));<br />      add(cancelButton, new AbsoluteConstraints(87, 190, 52, -1));<br />    }<br />    else {<br />      add(todayButton, new AbsoluteConstraints(55, 190, 52, -1));<br />    }<br />  }</p>
		<p>  private void onToday(final java.awt.event.ActionEvent evt) {<br />    selectedDate = getToday();<br />    setVisible(!hideOnSelect);<br />    if (isVisible()) {<br />      monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />      calculateCalendar();<br />    }<br />  }</p>
		<p>  private void onCancel(final ActionEvent evt) {<br />    selectedDate = originalDate;<br />    setVisible(!hideOnSelect);<br />  }</p>
		<p>  private void onForwardClicked(final java.awt.event.ActionEvent evt) {<br />    final int day = selectedDate.get(Calendar.DATE);<br />    selectedDate.set(Calendar.DATE, 1);<br />    selectedDate.add(Calendar.MONTH, 1);<br />    selectedDate.set(Calendar.DATE,<br />                     Math.min(day, calculateDaysInMonth(selectedDate)));<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    calculateCalendar();<br />  }</p>
		<p>  private void onBackClicked(final java.awt.event.ActionEvent evt) {<br />    final int day = selectedDate.get(Calendar.DATE);<br />    selectedDate.set(Calendar.DATE, 1);<br />    selectedDate.add(Calendar.MONTH, -1);<br />    selectedDate.set(Calendar.DATE,<br />                     Math.min(day, calculateDaysInMonth(selectedDate)));<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    calculateCalendar();<br />  }</p>
		<p>  private void onDayClicked(final java.awt.event.MouseEvent evt) {<br />    final Label fld = (Label) evt.getSource();<br />    if (!"".equals(fld.getText())) {<br />      fld.setBackground(highlight);<br />      selectedDay = fld;<br />      selectedDate.set(Calendar.DATE, Integer.parseInt(fld.getText()));<br />      setVisible(!hideOnSelect);<br />    }<br />  }</p>
		<p>  private static GregorianCalendar getToday() {<br />    final GregorianCalendar gc = new GregorianCalendar();<br />    gc.set(Calendar.HOUR_OF_DAY, 0);<br />    gc.set(Calendar.MINUTE, 0);<br />    gc.set(Calendar.SECOND, 0);<br />    gc.set(Calendar.MILLISECOND, 0);<br />    return gc;<br />  }</p>
		<p>  private void calculateCalendar() {<br />    if (null != selectedDay) {<br />      selectedDay.setBackground(white);<br />      selectedDay = null;<br />    }<br />    final GregorianCalendar c = new GregorianCalendar(selectedDate.get(Calendar.<br />        YEAR), selectedDate.get(Calendar.MONTH), 1);<br />    final int maxDay = calculateDaysInMonth(c);<br />    final int selectedDay = Math.min(maxDay, selectedDate.get(Calendar.DATE));<br />    int dow = c.get(Calendar.DAY_OF_WEEK);<br />    for (int dd = 0; dd &lt; dow; dd++) {<br />      daysInMonth[0][dd].setText("");<br />    }<br />    int week;<br />    do {<br />      week = c.get(Calendar.WEEK_OF_MONTH);<br />      dow = c.get(Calendar.DAY_OF_WEEK);<br />      final Label fld = this.daysInMonth[week - 1][dow - 1];<br />      fld.setText(Integer.toString(c.get(Calendar.DATE)));<br />      if (selectedDay == c.get(Calendar.DATE)) {<br />        fld.setBackground(highlight);<br />        this.selectedDay = fld;<br />      }<br />      if (c.get(Calendar.DATE) &gt;= maxDay)<br />        break;<br />      c.add(Calendar.DATE, 1);<br />    }<br />    while (c.get(Calendar.DATE) &lt;= maxDay); week--;<br />    for (int ww = week; ww &lt; daysInMonth.length; ww++) {<br />      for (int dd = dow; dd &lt; daysInMonth[ww].length; dd++) {<br />        daysInMonth[ww][dd].setText("");<br />      }<br />      dow = 0;<br />    }<br />    c.set(Calendar.DATE, selectedDay);<br />    selectedDate = c;<br />  }</p>
		<p>  private static int calculateDaysInMonth(final Calendar c) {<br />    int daysInMonth = 0;<br />    switch (c.get(Calendar.MONTH)) {<br />      case 0:<br />      case 2:<br />      case 4:<br />      case 6:<br />      case 7:<br />      case 9:<br />      case 11:<br />        daysInMonth = 31;<br />        break;<br />      case 3:<br />      case 5:<br />      case 8:<br />      case 10:<br />        daysInMonth = 30;<br />        break;<br />      case 1:<br />        final int year = c.get(Calendar.YEAR);<br />        daysInMonth = (0 == year % 1000) ? 29 : (0 == year % 100) ? 28 :<br />            (0 == year % 4) ? 29 : 28;<br />        break;<br />    }<br />    return daysInMonth;<br />  }</p>
		<p>  private static String formatDateText(final Date dt) {<br />    final DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);<br />    final StringBuffer mm = new StringBuffer();<br />    final StringBuffer yy = new StringBuffer();<br />    final FieldPosition mmfp = new FieldPosition(DateFormat.MONTH_FIELD);<br />    final FieldPosition yyfp = new FieldPosition(DateFormat.YEAR_FIELD);<br />    df.format(dt, mm, mmfp);<br />    df.format(dt, yy, yyfp);<br />    return (mm.toString().substring(mmfp.getBeginIndex(), mmfp.getEndIndex()) +<br />            "月 " +<br />            yy.toString().substring(yyfp.getBeginIndex(), yyfp.getEndIndex()) +<br />            "年");<br />  }<br />}</p>
<img src ="http://www.blogjava.net/kuntao/aggbug/43560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuntao/" target="_blank">Kun Tao's Blog</a> 2006-04-27 14:32 <a href="http://www.blogjava.net/kuntao/archive/2006/04/27/43560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当前流行的J2EE WEB应用架构分析（2）</title><link>http://www.blogjava.net/kuntao/archive/2005/10/21/16338.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Fri, 21 Oct 2005 12:38:00 GMT</pubDate><guid>http://www.blogjava.net/kuntao/archive/2005/10/21/16338.html</guid><wfw:comment>http://www.blogjava.net/kuntao/comments/16338.html</wfw:comment><comments>http://www.blogjava.net/kuntao/archive/2005/10/21/16338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuntao/comments/commentRss/16338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuntao/services/trackbacks/16338.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2.1.3. 优缺点 优点： 一些开发商开始采用并推广这个框架作为开源项目，有很多先进的实现思想对大型的应用支持的较好有集中的网页导航定义 缺点： 不是业届标准对开发工具的支持不够复杂的taglib，需要比较长的时间来掌握html form 和 actionform的搭配比较封闭，但这也是它的精华所在。 修改建议把actionform属性的设置器和访问器修改成读取或生成xml文档的方法，然后 ht...&nbsp;&nbsp;<a href='http://www.blogjava.net/kuntao/archive/2005/10/21/16338.html'>阅读全文</a><img src ="http://www.blogjava.net/kuntao/aggbug/16338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-10-21 20:38 <a href="http://www.blogjava.net/kuntao/archive/2005/10/21/16338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当前流行的J2EE WEB应用架构分析（1）</title><link>http://www.blogjava.net/kuntao/archive/2005/10/21/16334.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Fri, 21 Oct 2005 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/kuntao/archive/2005/10/21/16334.html</guid><wfw:comment>http://www.blogjava.net/kuntao/comments/16334.html</wfw:comment><comments>http://www.blogjava.net/kuntao/archive/2005/10/21/16334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuntao/comments/commentRss/16334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuntao/services/trackbacks/16334.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转载说明：本文主要讲述内容：J2EE web架构基线，模型选取以及几个模型的优缺点对比。一、J2EE体系包括java server pages(JSP) ,java SERVLET, enterprise bean，WEB service等技术。怎样把这些技术组合起来形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。完成这个步骤可以形成一个主要里程碑基线。1.各种因数初步确定 为了...&nbsp;&nbsp;<a href='http://www.blogjava.net/kuntao/archive/2005/10/21/16334.html'>阅读全文</a><img src ="http://www.blogjava.net/kuntao/aggbug/16334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-10-21 20:21 <a href="http://www.blogjava.net/kuntao/archive/2005/10/21/16334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发J2EE应用应遵循的几点原则</title><link>http://www.blogjava.net/kuntao/archive/2005/10/21/16329.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Fri, 21 Oct 2005 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/kuntao/archive/2005/10/21/16329.html</guid><wfw:comment>http://www.blogjava.net/kuntao/comments/16329.html</wfw:comment><comments>http://www.blogjava.net/kuntao/archive/2005/10/21/16329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kuntao/comments/commentRss/16329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kuntao/services/trackbacks/16329.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注：目前J2EE的开发工作网络上讨论的热火朝天，各种新技术层出不穷，当然了我们这些新手看的也是一头雾水，感觉的j2ee涉及到的技术太广，各种framework令人眼花缭乱，今天看了这篇介绍性文章，感觉不错，和大家分享一下文章的主要观点。（其中提到的一些技术或规范可能比较老了，主要是学习一下作者的观点）　1.结合商业需求选择合理的架构一般而言，企业信息系统（EIS）都要求自己稳定、安全、可靠、高效、...&nbsp;&nbsp;<a href='http://www.blogjava.net/kuntao/archive/2005/10/21/16329.html'>阅读全文</a><img src ="http://www.blogjava.net/kuntao/aggbug/16329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-10-21 19:43 <a href="http://www.blogjava.net/kuntao/archive/2005/10/21/16329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>