Работа с классом GregorianCalendar - Java
Формулировка задачи:
Hello world!
Возникла проблема при создании трех комбобоксов работающих с объектом класса GregorianCalendar. Комбобоксы задают дату на определенный момент, соответственно год, месяц, день. При выборе месяца комбобокс отвечающий за выбор дня должен просчитать количество дней в месяце. Ну и как обычно проблема в високосных годах.
Заранее благодарен за любую помощь.
Листинг программы
- /*
- *
- */
- package testframe;
- import java.awt.EventQueue;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import javax.swing.JComboBox;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- /**
- *
- * @author Timur_000
- */
- public class TestFrame {
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- // TODO code application logic here
- EventQueue.invokeLater(new Runnable()
- {
- public void run()
- {
- OrgFrame frame = new OrgFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- });
- }
- }
- class OrgFrame extends JFrame {
- public static final int DEFAULT_WIDTH = 800;
- public static final int DEFAULT_HEIGHT = 600;
- private JComboBox<Integer> comboBoxYear;
- private JComboBox<String> comboBoxMonth;
- private JComboBox<Integer> comboBoxDay;
- GregorianCalendar calendar;
- public OrgFrame(){
- setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
- setTitle("Органайзер");
- // setLayout();
- JPanel framePanel = new JPanel();
- calendar = new GregorianCalendar();
- // комбобокс для выбора года
- comboBoxYear = new JComboBox();
- comboBoxYear.addItem(calendar.get(Calendar.YEAR));
- for(int i=1; i<5; i++)
- comboBoxYear.addItem(calendar.get(Calendar.YEAR)+i);
- // здесь должен быть слушатель событий обекта comboBoxYear
- // временная переменная год
- comboBoxYear.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent event)
- {
- calendar.set(Calendar.YEAR,(int)comboBoxYear.getSelectedIndex());
- // calendar.set(Calendar.MONTH,(int)comboBoxMonth.getSelectedIndex());
- // calendar.set(Calendar.DAY_OF_MONTH,(int)comboBoxMonth.getSelectedIndex());
- }
- });
- // комбобокс для выбора месяца
- comboBoxMonth = new JComboBox();
- String month[] = {"Январь", "Февраль", "Март", "Апрель", "Май",
- "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};
- for(int i=0; i<12; i++)
- comboBoxMonth.addItem(month[i]);
- // while()
- comboBoxMonth.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent event)
- {
- // Устанавливаем месяц в календаре
- calendar.set(Calendar.MONTH,(int)comboBoxMonth.getSelectedIndex());
- // Устанавливаем год в календаре
- // calendar.set(Calendar.YEAR, (int)comboBoxYear.getSelectedIndex());
- // Устанавливаем день в календаре
- // calendar.set(Calendar.DAY_OF_MONTH, comboBoxDay.getSelectedIndex());
- // Удаляем дни из ComboBoxDay
- comboBoxDay.removeAllItems();
- // Вычисляем кол-во дней в месяце
- calendar.set(Calendar.DAY_OF_MONTH, 1); // Устанавливаем день на первый в месяце
- int month = calendar.get(Calendar.MONTH);
- do
- {
- comboBoxDay.addItem(calendar.get(Calendar.DAY_OF_MONTH));
- calendar.add(Calendar.DAY_OF_MONTH, 1); // прибавляем один день
- }
- while(calendar.get(Calendar.MONTH)==month);
- calendar.set(Calendar.MONTH, month);
- framePanel.revalidate();
- }
- });
- // комбобокс для выбора дня
- comboBoxDay = new JComboBox();
- // установка занчений comboBoxDay
- for(int i=1; i<=31; i++)
- comboBoxDay.addItem(i);
- comboBoxDay.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent event)
- {
- calendar.set(Calendar.DAY_OF_MONTH,(int)comboBoxDay.getSelectedIndex());
- }
- });
- framePanel.add(new JLabel("Выбор года"));
- framePanel.add(comboBoxYear);
- framePanel.add(new JLabel("Выбор месяца"));
- framePanel.add(comboBoxMonth);
- framePanel.add(new JLabel("Выбор дня"));
- framePanel.add(comboBoxDay);
- add(framePanel);
- }
- }
Решение задачи: «Работа с классом GregorianCalendar»
textual
Листинг программы
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.set(Calendar.YEAR, getSelectedYear());
- // month - 0-based
- cal.set(Calendar.MONTH, getSelectedMonth());
- cal.add(Calendar.MONTH, 1);
- cal.add(Calendar.DAY_OF_MONTH, -1);
- int lastDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д