1

我正在尝试使用此代码将当前日期和第二天的日期放入 JComboBox

private void dateCombo(){
    Calendar cal = new GregorianCalendar();
    int month =cal.get(Calendar.MONTH);
    int year =cal.get(Calendar.YEAR);
    int day =cal.get(Calendar.DAY_OF_MONTH);
    cmb_date.addItem(+year+"-"+(month+1)+"-"+day);
    cmb_date.addItem(+year+"-"+(month+1)+"-"+(day+1));
}

但它以“yyyy-md”格式显示日期,我希望它以“yyyy-mm-dd”格式显示。

我想我可以使用

Date date = new Date();
SimpleDateFormat  sdf = new SimpleDateFormat("yyyy/MM/dd");
txt_date.setText(sdf.format(date));

以 'yyyy-mm-dd' 格式获取当前日期,但如何处理第二天的日期?

4

3 回答 3

5
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1); //next day
cal.getTime(); // next day's date  

并且您需要将格式更改yyyy-MM-dd为您想要的格式

于 2013-02-10T00:13:53.943 回答
2

您应该将日期对象添加到JComboBox中,而不是当前日期的字符串和下一天的日期,然后使用自定义的ListCellRenderer以所需的格式呈现日期。

示例代码:

import java.awt.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;


public class DateComboExample {

    // Create Date Renderer for formatting Date
    public static class DateComboBoxRenderer extends DefaultListCellRenderer {

        // desired format for the date
        private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus ) {
            Object item = value;

            // if the item to be rendered is date then format it
            if( item instanceof Date ) {
                item = dateFormat.format( ( Date ) item );
            }
            return super.getListCellRendererComponent( list, item, index, isSelected, cellHasFocus);
        }
    }

    public static void main( String[] str ) {
        JComboBox combo = new JComboBox();

        // Add current date
        GregorianCalendar calendar = new GregorianCalendar();
        combo.addItem( calendar.getTime() );

        // Add Next date
        calendar.roll( GregorianCalendar.DAY_OF_MONTH, 1 );
        combo.addItem( calendar.getTime() );

        // Set Renderer for formating the date in combobox
        combo.setRenderer( new DateComboBoxRenderer() );

        JFrame frame = new JFrame( "Date Rendere Example" );

        JPanel panel = new JPanel();
        panel.add( new JLabel( "Date Combo: ") );
        panel.add( combo );

        frame.add( panel );
        frame.pack();
        frame.setVisible( true );
    }

}
于 2013-02-10T03:23:07.993 回答
0

我通常从不向JComboBox添加字符串;相反,我定义了一个数据对象,其中包含所需类型的成员(在您的情况下为Date)并覆盖toString方法以确定它将如何出现在JComboBox中。

public class DateItem {

    private Date mDate;

    public DateItem(Date date) {
        mDate = date;
    }

    public Date getDate() {
        return mDate;
    }

    @Override
    public String toString() {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

        return sdf.format(mDate);
    }
}

现在,您可以按照 Jigar Joshi 在他的回答中显示的模式将您想要的所有日期插入到 JComboBox 中。在这里,我用它总共增加了四个星期:

JComboBox cb = new JComboBox();

Calendar calendar = Calendar.getInstance();

for (int i = 0; i < 28; ++i) {
    cb.addItem(new DateItem(calendar.getTime()));
    calendar.add(Calendar.DATE, 1);
}

使用数据对象的优点是您可以轻松地从JComboBox中检索选定的日期,而不是从它的String表示。

DateItem di = (DateItem)cb.getSelectedItem();
Date d = di.getDate();
于 2013-02-10T00:38:04.270 回答