Работа с классом GregorianCalendar - Java

Узнай цену своей работы

Формулировка задачи:

Hello world! Возникла проблема при создании трех комбобоксов работающих с объектом класса GregorianCalendar. Комбобоксы задают дату на определенный момент, соответственно год, месяц, день. При выборе месяца комбобокс отвечающий за выбор дня должен просчитать количество дней в месяце. Ну и как обычно проблема в високосных годах. Заранее благодарен за любую помощь.
Листинг программы
  1. /*
  2. *
  3. */
  4. package testframe;
  5. import java.awt.EventQueue;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.util.Calendar;
  9. import java.util.GregorianCalendar;
  10. import javax.swing.JComboBox;
  11. import javax.swing.JFrame;
  12. import javax.swing.JLabel;
  13. import javax.swing.JPanel;
  14. /**
  15. *
  16. * @author Timur_000
  17. */
  18. public class TestFrame {
  19. /**
  20. * @param args the command line arguments
  21. */
  22. public static void main(String[] args) {
  23. // TODO code application logic here
  24. EventQueue.invokeLater(new Runnable()
  25. {
  26. public void run()
  27. {
  28. OrgFrame frame = new OrgFrame();
  29. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  30. frame.setVisible(true);
  31. }
  32. });
  33. }
  34. }
  35. class OrgFrame extends JFrame {
  36. public static final int DEFAULT_WIDTH = 800;
  37. public static final int DEFAULT_HEIGHT = 600;
  38. private JComboBox<Integer> comboBoxYear;
  39. private JComboBox<String> comboBoxMonth;
  40. private JComboBox<Integer> comboBoxDay;
  41. GregorianCalendar calendar;
  42. public OrgFrame(){
  43.  
  44. setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  45. setTitle("Органайзер");
  46. // setLayout();
  47. JPanel framePanel = new JPanel();
  48. calendar = new GregorianCalendar();
  49. // комбобокс для выбора года
  50. comboBoxYear = new JComboBox();
  51. comboBoxYear.addItem(calendar.get(Calendar.YEAR));
  52. for(int i=1; i<5; i++)
  53. comboBoxYear.addItem(calendar.get(Calendar.YEAR)+i);
  54. // здесь должен быть слушатель событий обекта comboBoxYear
  55. // временная переменная год
  56. comboBoxYear.addActionListener(new ActionListener()
  57. {
  58. public void actionPerformed(ActionEvent event)
  59. {
  60. calendar.set(Calendar.YEAR,(int)comboBoxYear.getSelectedIndex());
  61. // calendar.set(Calendar.MONTH,(int)comboBoxMonth.getSelectedIndex());
  62. // calendar.set(Calendar.DAY_OF_MONTH,(int)comboBoxMonth.getSelectedIndex());
  63. }
  64. });
  65. // комбобокс для выбора месяца
  66. comboBoxMonth = new JComboBox();
  67. String month[] = {"Январь", "Февраль", "Март", "Апрель", "Май",
  68. "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};
  69. for(int i=0; i<12; i++)
  70. comboBoxMonth.addItem(month[i]);
  71. // while()
  72. comboBoxMonth.addActionListener(new ActionListener()
  73. {
  74. public void actionPerformed(ActionEvent event)
  75. {
  76. // Устанавливаем месяц в календаре
  77. calendar.set(Calendar.MONTH,(int)comboBoxMonth.getSelectedIndex());
  78. // Устанавливаем год в календаре
  79. // calendar.set(Calendar.YEAR, (int)comboBoxYear.getSelectedIndex());
  80. // Устанавливаем день в календаре
  81. // calendar.set(Calendar.DAY_OF_MONTH, comboBoxDay.getSelectedIndex());
  82. // Удаляем дни из ComboBoxDay
  83. comboBoxDay.removeAllItems();
  84. // Вычисляем кол-во дней в месяце
  85. calendar.set(Calendar.DAY_OF_MONTH, 1); // Устанавливаем день на первый в месяце
  86. int month = calendar.get(Calendar.MONTH);
  87. do
  88. {
  89. comboBoxDay.addItem(calendar.get(Calendar.DAY_OF_MONTH));
  90. calendar.add(Calendar.DAY_OF_MONTH, 1); // прибавляем один день
  91. }
  92. while(calendar.get(Calendar.MONTH)==month);
  93. calendar.set(Calendar.MONTH, month);
  94. framePanel.revalidate();
  95. }
  96. });
  97. // комбобокс для выбора дня
  98. comboBoxDay = new JComboBox();
  99. // установка занчений comboBoxDay
  100. for(int i=1; i<=31; i++)
  101. comboBoxDay.addItem(i);
  102. comboBoxDay.addActionListener(new ActionListener()
  103. {
  104. public void actionPerformed(ActionEvent event)
  105. {
  106. calendar.set(Calendar.DAY_OF_MONTH,(int)comboBoxDay.getSelectedIndex());
  107. }
  108. });
  109. framePanel.add(new JLabel("Выбор года"));
  110. framePanel.add(comboBoxYear);
  111. framePanel.add(new JLabel("Выбор месяца"));
  112. framePanel.add(comboBoxMonth);
  113. framePanel.add(new JLabel("Выбор дня"));
  114. framePanel.add(comboBoxDay);
  115. add(framePanel);
  116. }
  117. }

Решение задачи: «Работа с классом GregorianCalendar»

textual
Листинг программы
  1. Calendar cal = Calendar.getInstance();
  2. cal.clear();
  3. cal.set(Calendar.YEAR, getSelectedYear());
  4. // month - 0-based
  5. cal.set(Calendar.MONTH, getSelectedMonth());
  6. cal.add(Calendar.MONTH, 1);
  7. cal.add(Calendar.DAY_OF_MONTH, -1);
  8.  
  9. int lastDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут