Witam.
Mam dziwny problem, ale po kolei.
Program, który piszę to prosty Kalenadarz z opcją dodawania alarmów. W momencie wyboru daty alarmu, mam ustawione JComboBoxy by wybrać rok, miesiąc itp.
Na Boxie dla roku i miesiąca mam ustawione actionListenery po to by aktualizowały miesiące i dni. (np. po wybraniu lutego pojawiało się 28 dni a nie 31)
Jednak po wybraniu np. roku wywołuje się actionListener ustawiony na miesiąc. Totalnie nie mam pojęcia jak rozwiązać ten problem.
Poniżej umieszczam klasę w której zawarta jest implementacja.
package database;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class EventHandler extends JFrame {
/*
*
* [V] dodanie mozliwosci dodania godziny [] brak mozliwosci dodania alarmu na
* date przeszla
*/
private static GregorianCalendar calendar = new GregorianCalendar();
private static int year = calendar.get(GregorianCalendar.YEAR);
private final static int actualMonth = calendar.get(GregorianCalendar.MONTH);
private final static int actualYear = calendar.get(GregorianCalendar.YEAR);
private static int month = calendar.MONTH;
private static String[] hours = null;
private static String[] minutes = null;
public void addEvent() {
setVisible(true);
setBounds(100, 100, 500, 489);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
JLabel lblEventName = new JLabel("Nazwa : ");
lblEventName.setBounds(65, 68, 120, 14);
add(lblEventName);
final JTextField textField_1 = new JTextField();
textField_1.setBounds(160, 65, 86, 20);
add(textField_1);
textField_1.setColumns(10);
JLabel lblPlaceName = new JLabel("Miejsce : ");
lblPlaceName.setBounds(65, 115, 120, 14);
add(lblPlaceName);
final JTextField textField_2 = new JTextField();
textField_2.setBounds(160, 112, 247, 20);
add(textField_2);
textField_2.setColumns(10);
JLabel lblDescription = new JLabel("Opis : ");
lblDescription.setBounds(65, 162, 120, 14);
add(lblDescription);
final JTextField textField_3 = new JTextField();
textField_3.setBounds(160, 157, 212, 40);
add(textField_3);
textField_3.setColumns(10);
JLabel lblDay = new JLabel("Day");
lblDay.setBounds(210, 205, 40, 20);
add(lblDay);
final JComboBox comboDay = new JComboBox(getDaysForComboBox());
comboDay.setBounds(205, 225, 60, 30);
add(comboDay);
JLabel lblMonth = new JLabel("Month");
lblMonth.setBounds(140, 205, 40, 20);
add(lblMonth);
final JComboBox comboMonth = new JComboBox(getMonthsForComboBox());
comboMonth.setBounds(135, 225, 60, 30);
comboMonth.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (comboMonth.getSelectedItem() != null) {
System.out.println("mon");
month = Integer.parseInt((String) comboMonth.getSelectedItem());
actualizeComboBoxes(comboMonth, comboDay);
}
}
});
add(comboMonth);
JLabel lblYear = new JLabel("Year");
lblYear.setBounds(70, 205, 40, 20);
add(lblYear);
final JComboBox comboYear = new JComboBox(getYearsForComboBox());
comboYear.setBounds(65, 225, 60, 30);
comboYear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (comboYear.getSelectedItem() != null) {
System.out.println("year");
year = Integer.parseInt((String) comboYear.getSelectedItem());
actualizeComboBoxes(comboMonth, comboDay);
}
}
});
add(comboYear);
JLabel lblHour = new JLabel("Hours");
lblHour.setBounds(280, 205, 40, 20);
add(lblHour);
JComboBox comboHour = new JComboBox(getHoursForComboBox());
comboHour.setBounds(275, 225, 60, 30);
add(comboHour);
JLabel lblMinute = new JLabel("Minutes");
lblMinute.setBounds(350, 205, 50, 20);
add(lblMinute);
JComboBox comboMinute = new JComboBox(getMinutesForComboBox());
comboMinute.setBounds(345, 225, 60, 30);
add(comboMinute);
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (textField_1.getText().isEmpty() || textField_2.getText().isEmpty()
|| textField_3.getText().isEmpty())
;
else {
// DBHandler.addEvent(new Event(new Date(), description, place))
dispose();
}
}
});
okButton.setBounds(200, 275, 60, 40);
add(okButton);
}
private String[] getYearsForComboBox() {
ArrayList<String> years = new ArrayList();
for (int i = year; i < year + 120; i++)
years.add(String.valueOf(i));
String[] array = new String[years.size()];
return years.toArray(array);
}
private String[] getMonthsForComboBox() {
String[] months;
if (year == actualYear) {
months = new String[12 - actualMonth];
for (int i = 0; i < months.length; i++)
months[i] = String.valueOf(actualMonth + 1 + i);
} else {
months = new String[12];
for (int i = 0; i < months.length; i++)
months[i] = String.valueOf(i + 1);
}
System.out.println(months.length);
return months;
}
private String[] getDaysForComboBox() {
GregorianCalendar tmp = new GregorianCalendar(year, month, 1);
String[] days = new String[tmp.getActualMaximum(GregorianCalendar.DAY_OF_MONTH)];
for (int i = 0; i < days.length; i++)
days[i] = String.valueOf(i + 1);
return days;
}
private void actualizeComboBoxes(JComboBox monthBox, JComboBox day) {
monthBox.removeAllItems();
for (String e : getMonthsForComboBox())
monthBox.addItem(e);
day.removeAllItems();
for (String e : getDaysForComboBox())
day.addItem(e);
}
private String[] getHoursForComboBox() {
if (hours == null) {
hours = new String[24];
for (int i = 0; i < 24; i++) {
if (i < 10)
hours[i] = "0" + String.valueOf(i);
else
hours[i] = String.valueOf(i);
}
}
return hours;
}
private String[] getMinutesForComboBox() {
if (minutes == null) {
minutes = new String[60];
for (int i = 0; i < minutes.length; i++) {
if (i < 10)
minutes[i] = "0" + String.valueOf(i);
else
minutes[i] = String.valueOf(i);
}
}
return minutes;
}
public void setYear(int year) {
this.year = year;
}
}