日歷Frame如下:
public class JCalendarFrame extends JFrame { private static final long serialVersionUID = 2485844292810125818L; public JCalendarFrame() {
...
}
}
日期文本輸入區的JTextField如下:
public class DateTextField extends JFormattedTextField { private static final long serialVersionUID = 6586245387546242836L; private static MaskFormatter maskFormatter; public DateTextField(String value) {
this();
enableEvents(AWTEvent.FOCUS_EVENT_MASK);
setFocusLostBehavior(COMMIT_OR_REVERT);
setFormatterFactory(new DefaultFormatterFactory(maskFormatter)); setColumns(20);
if (null == value || "".equals(value)) {
setValue("");
} else {
setValue(value);
}
}
}
哪位高手能幫我寫個類:
實現將以上兩者結合起來,形成一個控件,左面是日期文本區,右面是日曆小按鈕。
按下小按鈕彈出日歷Frame,選擇日期后將日期以文本形式填加到文本區,日歷Frame關閉。小弟初來乍到,窮,分不多,抱歉!

解决方案 »

  1.   


    public class JCalendarFrame extends JFrame {    private static final long serialVersionUID = 2485844292810125818L;    public JCalendarFrame() {
            ...
        }    private Calendar calendar;
        public Calendar getCalendar(){return calendar;}
    }
    public class DateTextField extends JFormattedTextField {    private static final long serialVersionUID = 6586245387546242836L;    private static MaskFormatter maskFormatter;    public DateTextField(String value) {
            this();
            enableEvents(AWTEvent.FOCUS_EVENT_MASK);
            setFocusLostBehavior(COMMIT_OR_REVERT);
            setFormatterFactory(new DefaultFormatterFactory(maskFormatter));        setColumns(20);
            if (null == value || "".equals(value)) {
                setValue("");
            } else {
                setValue(value);
            }
        }
    }
    public class Test extends JFrame {
        public Test() {
         final DateTextField date = new DateTextField();
         this.getContentPane().add(date);
        
            final Button btn = new Button("...");
            btn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    final JCalendarFrame calendar = new JCalendarFrame();
    calendar.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    date.setText(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getCalendar().getTime()));
    }
    });
    }
            });
            this.getContentPane().add(btn);
        }
    }