Работа с классом 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д