java - Why do the date pickers trigger a JComboBox's actionPerformed unexpectedly? -
java - Why do the date pickers trigger a JComboBox's actionPerformed unexpectedly? -
i have 2 date picker components , jcombobox component associated action listeners. problem this: when select date of date pickers, not associated events fired event jcombobox fired. add together surprise, event jcombobox fired first!
on other hand, when click on jcombobox component , select value, jcombobox event fired , date picker events not fired, fine. reason of situation described in above paragraph?
to clarify further, here's sample output console. first click on first date picker , select date:
index: -1 null combo box involved. surprised? fired when datepicker1 involved.
(yes, i'm surprised!) click on sec date picker , select date:
index: -1 null combo box involved. surprised? fired when datepicker2 involved.
(yes, i'm surprised again!) , click on combo box , select item:
index: 1 lastly 6 months combo box involved. surprised?
no, i'm not surprised looking @ output above.
any ideas why unusual situation happens?
the finish source code:
import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.calendar; import java.util.date; import javax.swing.jcombobox; import javax.swing.jframe; import javax.swing.jlabel; import net.sourceforge.jdatepicker.jdatecomponentfactory; import net.sourceforge.jdatepicker.impl.jdatepickerimpl; import net.sourceforge.jdatepicker.impl.utilcalendarmodel; import org.jdesktop.swingx.jxdatepicker; public class datepickerdemo { private static boolean isdaterangeconsistent(utilcalendarmodel m1, utilcalendarmodel m2) { homecoming m1.getvalue().compareto(m2.getvalue()) <= 0 ? true : false; } private static void createandshowgui() { //create , set window. jframe frame = new jframe("datepickerdemo"); frame.setdefaultcloseoperation(jframe.exit_on_close); final jlabel label1 = new jlabel(); label1.settext("choose range (start - end): "); string[] fixedranges = {"last 3 months", "last 6 months", "last 12 months"}; final jcombobox<string> fixedrangescombobox = new jcombobox<string>(fixedranges); fixedrangescombobox.setselectedindex(-1); final jdatepickerimpl datepicker1 = (jdatepickerimpl) jdatecomponentfactory.createjdatepicker(); datepicker1.getmodel().setselected(true); final jdatepickerimpl datepicker2 = (jdatepickerimpl) jdatecomponentfactory.createjdatepicker(); datepicker2.getmodel().setselected(true); datepicker1.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { // start date cannot after end date! if ( ! isdaterangeconsistent((utilcalendarmodel) datepicker1.getmodel(), (utilcalendarmodel) datepicker2.getmodel())) { ((utilcalendarmodel) datepicker1.getmodel()) .setvalue(((utilcalendarmodel) datepicker2.getmodel()).getvalue()); } //if date range changed date picker, fixed combo box becomes irrelevant fixedrangescombobox.setselectedindex(-1); int rangedaysstart = datepicker1.getmodel().getday(); int rangemonthsstart = 1 + datepicker1.getmodel().getmonth(); int rangeyearsstart = datepicker1.getmodel().getyear(); label1.settext("choose range (start - end): " + rangedaysstart + "/" + rangemonthsstart + "/" + rangeyearsstart); system.out.println("this fired when datepicker1 involved."); } }); datepicker2.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { // end date cannot before start date! if ( ! isdaterangeconsistent((utilcalendarmodel) datepicker1.getmodel(), (utilcalendarmodel) datepicker2.getmodel())) { ((utilcalendarmodel) datepicker2.getmodel()) .setvalue(((utilcalendarmodel) datepicker1.getmodel()).getvalue()); } //if date range changed date picker, fixed combo box becomes irrelevant fixedrangescombobox.setselectedindex(-1); int rangedaysstart = datepicker2.getmodel().getday(); int rangemonthsstart = 1 + datepicker2.getmodel().getmonth(); int rangeyearsstart = datepicker2.getmodel().getyear(); label1.settext("choose range (start - end): " + rangedaysstart + "/" + rangemonthsstart + "/" + rangeyearsstart); system.out.println("this fired when datepicker2 involved."); } }); fixedrangescombobox.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { system.out.println("index: " + fixedrangescombobox.getselectedindex() + " " + fixedrangescombobox.getselecteditem()); system.out.println("combo box involved. surprised?"); } }); frame.getcontentpane().add(label1, borderlayout.north); frame.getcontentpane().add(datepicker1, borderlayout.center); frame.getcontentpane().add(datepicker2, borderlayout.east); frame.getcontentpane().add(fixedrangescombobox, borderlayout.page_end); //display window. frame.pack(); frame.setvisible(true); } public static void main(string[] args) { //schedule job event-dispatching thread: //creating , showing application's gui. javax.swing.swingutilities.invokelater(new runnable() { public void run() { createandshowgui(); } }); } }
you should remove fixedrangescombobox.setselectedindex(-1);
2 actionlistener
anonymous classes :)
java swing event-handling datepicker jcombobox
Comments
Post a Comment