java - How to re-apply or re-render my JTable after editing the JTable's JSpinner cell -
i have problem on applying defaulttablerenderer
jtable
set contain jspinner
, jcombobox
through use of defaultcelleditors
i have created simple defaulttablerenderer
checks if there's duplicate time or invalid time value shown below.
public class scheduletablecellrenderer extends defaulttablecellrenderer { @override public component gettablecellrenderercomponent( jtable table, object value, boolean isselected, boolean hasfocus, int row, int col) { component cellcomponent = super.gettablecellrenderercomponent(table, value, isselected, hasfocus, row, col); object starttimevalue = table.getmodel().getvalueat(row, 1); object endtimevalue = table.getmodel().getvalueat(row,2); if(starttimevalue!= null && endtimevalue != null && starttimevalue.tostring().equals(endtimevalue.tostring()) ){ system.out.print("start time: "+starttimevalue+", "); system.out.println(endtimevalue+"\n"); cellcomponent.setbackground(color.red); ((jlabel)cellcomponent).setforeground(color.white); } if(row%2 == 0){ cellcomponent.setbackground(color.cyan); ((jlabel)cellcomponent).setforeground(color.black); } else{ cellcomponent.setbackground(color.white); ((jlabel)cellcomponent).setforeground(color.black); } return cellcomponent; } }
i'd color rows red if user selects time duplicate or conflict another. the rendering or changing of row color must occur after user selects time , moves next column.
i have tried re-apply defaultrenderer refresh row colors if starttime equals endtime it's not working. guess i'm doing wrong.
i have attempted re-apply renderer created when jspinner's state changed no luck.
public class scheduletimecelleditor extends defaultcelleditor { private final jspinner spinner; private final spinnerdatemodel spinnerdatemodel; public scheduletimecelleditor(jtable jtblschedule) { super(new jtextfield()); this.jtblschedule = jtblschedule; spinnerdatemodel = new spinnerdatemodel(); spinner.addchangelistener(new changelistener() { @override public void statechanged(changeevent e) { jtblschedule.setdefaultrenderer(new scheduletablecellrenderer); } }); } }
what simplest way can achieve this.
i'd appreciate help.
thank you.
Comments
Post a Comment