như đã giải thích Tôi muốn đạt được, khi người dùng đang chỉnh sửa ngày trong JXDatePicker, anh ấy có thể chọn, thời tiết anh ấy nhập một lần nữa trong cùng một định dạng, theo mặc định dd.MM.yyyy hoặc chỉ dd.MM.yy. Khi anh ta sử dụng dạng ngắn tôi muốn Picker chọn thế kỷ hiện tại.JXDatePicker sử dụng SimpleDateFormat để định dạng dd.MM.yy thành dd.MM.yyyy với thế kỷ hiện tại
Ví dụ:
27.01.2012 edited to 27.01.10 should result in 27.01.2010
cũng như:
27.01.2012 edited to 27.01.2010 should also result in 27.01.2010
Theo mặc định, JXDatePicker Handels nó theo cách sau:
27.01.2012 edited to 27.01.10 results in 27.01.0010
Mà không phải là thực sự là cách tôi muốn nó hoạt động. Sau một số nghiên cứu ngắn, tôi đã tìm thấy Phương pháp sau trong SimpleDateFormat
/**
* Sets the 100-year period 2-digit years will be interpreted as being in
* to begin on the date the user specifies.
*
* @param startDate During parsing, two digit years will be placed in the range
* <code>startDate</code> to <code>startDate + 100 years</code>.
*/
public void set2DigitYearStart(Date startDate)
Khi xem lần đầu, điều này nghe có vẻ chính xác như những gì tôi cần. Vì vậy, tôi đã thử nghiệm nó và không may nó không hoạt động như tôi hy vọng nó sẽ. Điều này là do tôi muốn sử dụng dd.MM.yyyy làm định dạng để hiển thị ngày và cũng muốn nó được hiển thị như thế trong mã chỉnh sửa. Ví dụ khi người dùng gõ vào một ngày như 27.01.2012, tôi cũng muốn nó giống như vậy trong bản chỉnh sửa, và không chỉ là dạng ngắn: 27.01.12.
Vấn đề của tôi bây giờ là, set2DigitYearStart (Ngày) không may chỉ hoạt động, khi tôi chọn sử dụng shortform trong editmode. Tôi đã làm một ví dụ nhỏ để hiển thị trường hợp này (Thư viện SwingX là bắt buộc, vì jxdatepicker và có thể được tìm thấy là here).
public class DatePickerExample extends JPanel
{
static JFrame frame;
public DatePickerExample()
{
JXDatePicker picker = new JXDatePicker();
JTextField field = new JTextField(10);
add(field);
add(picker);
final Calendar instance = Calendar.getInstance();
instance.set(2012, 01, 26);
Date date = instance.getTime();
picker.setDate(date);
// SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy");//Works, but I wonna display and edit it with dd.MM.yyyy
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
final Date startDate = new Date(0);//01.01.1970
format.set2DigitYearStart(startDate);
picker.setFormats(format);
}
public static void main(String[] args)
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(400, 400, 400, 400);
frame.setLayout(new BorderLayout());
frame.add(new DatePickerExample());
frame.setVisible(true);
}
}
Bất kỳ ai đã có yêu cầu tương tự và có thể cho tôi biết cách thực hiện công việc này? Bất kỳ ý tưởng được chào đón. Cảm ơn bạn rất nhiều trước. ymene
* "Tôi muốn Picker chọn thế kỷ hiện tại." * Ah, chuẩn bị cho lỗi Y2.1K sớm, tôi hiểu rồi. ;) –
Haha, đã cho tôi! Mặc dù năm 2012, không có gì sai khi xem xét cách phần mềm sẽ hoạt động trong tương lai! : P – crusam