创建一个java Date Picker组件?

时间:2010-05-24 09:09:27

标签: java datepicker

我有MM/dd/yyyy格式的datepicker组件,但我希望以dd/MM/yyyy的形式在java中创建日期选择器。那么我在哪里可以获得建议或相关解决方案。请给出基本的想法。 在此先感谢..

4 个答案:

答案 0 :(得分:3)

JXDatePicker

您可以使用setFormats更改日期格式。请参阅this pagethis one

如果您正在谈论从头开始编写自己的组件,那么您需要实现整个事情,这似乎有点浪费时间?

答案 1 :(得分:0)

尝试JCalendar

您可以从http://www.toedter.com/en/jcalendar/index.html

下载

答案 2 :(得分:0)

Any+Time™ DatePicker/TimePicker AJAX Calendar Widget允许您以任何您喜欢的格式指定日期。它还具有WAI / ARIA键盘支持和广泛的CSS自定义选项,包括jQuery UI支持。

答案 3 :(得分:0)

我想分享我刚刚为我的项目编写的内容,我必须为可以就地编辑的JTable创建一个简单快速的日期编辑器,它也可以用作普通控件。 您可以看到可以修改的日期格式切换SimpleDateFormat中使用的字符串的顺序,但不要忘记切换范围数组。 这是代码:

public class DateControl extends JPanel {
    @SuppressWarnings("unchecked")
    private JComboBox<String>[] combos = new JComboBox[3];
    SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    final int ranges[][] = {{2012,2050},{1,12},{1,31}};
    public DateControl() {
        super();
        combos[0] =  new JComboBox<String>();
        combos[1] =  new JComboBox<String>();
        combos[2] =  new JComboBox<String>();

        // Fill the combos
        for (int i = 0; i<combos.length; i++)
            for (int j = ranges[i][0]; j<ranges[i][1]; j++) 
                combos[i].addItem((j<9?"0":"")+Integer.toString(j));

        this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
        for (JComboBox<String> c: combos) {

            // Remove the arrow button from the combo boxes (optional)
            c.setUI(new BasicComboBoxUI() {
                protected JButton createArrowButton() {
                    return new JButton() {
                        public int getWidth() {
                            return 0;
                        }
                    };
                }
            }); 

            this.add(c);
        }

        //This is just for a nice look touch (optional)
        this.setBorder(BorderFactory.createRaisedBevelBorder());

        // Set to today's date
        setDate(new Date());
    }

    // Date argument constructor
    public DateControl(Date date) {
        this();
        setDate(date);
    }

    public void setDate(Date d) {
        String[] date = df.format(d).split("/");
        for (int i=0;i<combos.length; i++)
            combos[i].setSelectedItem(date[i]);
    }

    public Date getDate() {
        String str = combos[0].getSelectedItem()+"/"+combos[1].getSelectedItem()+"/"+combos[2].getSelectedItem();
        Date ret = null;
        try {
            ret = df.parse(str);
        } catch (ParseException e) {e.printStackTrace();}
        return ret;
    }
}

然后它可以用作这样的单元格编辑器:

class DateCellEditor extends AbstractCellEditor implements TableCellEditor {
    SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    private DateControl dateControl;

    public DateCellEditor() {
        dateControl = new DateControl();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
            Object value,
            boolean isSelected,
            int row,
            int column) {

        Date d = new Date();    

        try {
           Object str = table.getValueAt(row, column);
           if (str!=null)
               d = df.parse((String)str);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        dateControl.setDate(d);
        return dateControl;
    }

    @Override
    public Object getCellEditorValue() {
        return df.format(dateControl.getDate());
    }
}

新的单元格编辑器可以在您的表格列中使用,如下所示:

        TableColumn c = myTable.getColumnModel().getColumn(0);
        c.setCellEditor(new DateCellEditor());

我必须提醒你,这是一个单元格“编辑器”,它只会在单元格处于编辑状态时显示。日期值将由普通单元格“Renderer”显示为格式为yyyy / MM / dd的简单字符串。

我希望这一切对某人有所帮助:)。