Создать компонент выбора даты Java? - PullRequest
3 голосов
/ 24 мая 2010

У меня есть компонент datepicker в формате MM/dd/yyyy, но я хочу создать средство выбора даты в java форме dd/MM/yyyy. Так, где я могу получить предложение или связанные решения. Пожалуйста, дайте основную идею об этом. Заранее спасибо ..

Ответы [ 4 ]

3 голосов
/ 24 мая 2010

в JXDatePicker вы можете использовать setFormats для изменения формата даты. см эта страница и эта .

если вы говорите о написании своего собственного компонента с нуля, тогда вам нужно реализовать все это, что кажется пустой тратой времени?

0 голосов
/ 27 июня 2012

Я хочу поделиться чем-то, что я только что написал для своего проекта, мне пришлось создать простой и быстрый редактор дат для 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» в виде простой строки в формате гггг / мм / дд.

Надеюсь, все это кому-нибудь поможет :)

0 голосов
/ 24 мая 2010

Виджет AJAX календаря Any + Time ™ DatePicker / TimePicker позволяет указывать даты в любом формате, который вы хотите. Он также имеет поддержку клавиатуры WAI / ARIA и широкие возможности настройки CSS, включая поддержку пользовательского интерфейса jQuery.

0 голосов
/ 24 мая 2010

Попробуйте JCalendar

Вы можете скачать его с http://www.toedter.com/en/jcalendar/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...