/** * 日期的选择控件,可以作为普通的组件使用,在构造函数中,必须传入一个该组件的所有者对象。 * 并且该对象只能是一个Frame对象或者一个JFrame对象。 * 使用方法如下: * JFrame. frame2 = new JFrame(); * frame2.getContentPane().setLayout(null); * DateChooser date = new DateChooser(frame2); * frame2.getContentPane().add(date); * frame2.setSize(500, 400); * frame2.setVisible(true); *组件的外观象一个combox,单击下拉按钮就可以对日期进行选择。 * Title: 日期选择控件 * Copyright: Copyright (c) 2006 * Company: Xaccp * Date:2006年6月17日 * @author Tellixu(许天岭) * @version 1.0 */ class DateChooser extends JPanel { private int width = 200; //日期控件的宽度 private int height = 220; //日期控件的高度 private GridBagLayout gridBagLayout1 = new GridBagLayout(); // @jve:decl-index=0: private JTextField dateField = new JTextField(); private DateChooserButton btnChoose = new DateChooserButton("\u25BC"); //\u25BC是指: 下拉箭头的unicode码 private String parten; private Container owner; private int length=90; public DateChooser(Container owner,int length) { this.owner = owner; this.parten = "yyyy-MM-dd"; this.length=length; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。 */ public DateChooser(Container owner, String partten,int length) { this.owner = owner; this.parten = partten; this.length=length; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。 */ public DateChooser(Container owner, String partten) { this.owner = owner; this.parten = partten; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 以缺省的partten构建DateChooser对象 * 日期选择框的所有者必须是Frame或者是JFrame对象。 */ public DateChooser(Container owner) { this.owner = owner; this.parten = "yyyy-MM-dd"; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** *系统初始化 * @throws Exception */ private void init() throws Exception { dateField.setToolTipText("单击右边的按钮即可选择日期"); btnChoose.setToolTipText("单击即可选择日期"); this.setLayout(gridBagLayout1); dateField.setEditable(false); btnChoose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { DateChooser.this.btnChoose_actionPerformed(e); } }); Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parten); this.setText(simpleDateFormat.format(date)); this.add(dateField, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 , GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), this.length, 0)); this.add(btnChoose, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 , GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); } public void setToolTipText(String text) { dateField.setToolTipText(text); btnChoose.setToolTipText(text); } /** * 下拉按钮的事件处理 * @param e ActionEvent */ public void btnChoose_actionPerformed(ActionEvent e) { java.awt.Rectangle r = dateField.getBounds(); Point pOnScreen = dateField.getLocationOnScreen(); Point result = new Point(pOnScreen.x, pOnScreen.y + r.height); Point powner = owner.getLocation(); int offsetX = (pOnScreen.x + width) - (powner.x + owner.getWidth()); int offsetY = (pOnScreen.y + r.height + height) - (powner.y + ow