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