Работа с классом 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);

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


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

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

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