JavaFX TableView controls are not repainted correctly after remove item / add new item -
i using observablelist
control items , every time delete item, tableview
removes datasource. the view not being updated i'm still seeing items. difference removed item can not selected anymore.
similar problem: javafx listview , treeview controls not repainted correctly
in following code:
final tablecolumn<tmachinetype, string> testertype = new tablecolumn<tmachinetype, string>( bundle.getstring("table.testertype")); testertype .setcellvaluefactory(new propertyvaluefactory<tmachinetype, string>( "testertype")); testertype .setcellfactory(new callback<tablecolumn<tmachinetype, string>, tablecell<tmachinetype, string>>() { @override public tablecell<tmachinetype, string> call( final tablecolumn<tmachinetype, string> param) { final tablecell<tmachinetype, string> cell = new tablecell<tmachinetype, string>() { @override protected void updateitem(final string item, final boolean empty) { super.updateitem(item, empty); textproperty().unbind(); if (empty || item == null) { setgraphic(null); settext(null); } if (!empty) { final tmachinetype row = (tmachinetype) gettablerow().getitem(); textproperty().bind( row.testertypeproperty()); } } }; return cell; } });
tmachinetype class:
private final simplestringproperty testertype = new simplestringproperty(); @column(name = "tester_type") public string gettestertype() { return testertype.get(); } public void settestertype(string testertype) { this.testertype.set(testertype); } public stringproperty testertypeproperty() { return testertype; }
observable list: 1. db entities:
final query q = em.createquery("select t tmachinetype t"); final list resultlist = q.getresultlist();
2. obs. list setup:
observablelist<tmachinetype> observablelist; ... observablelist = fxcollections.observablearraylist(resultlist); tablemachinetype.setitems(observablelist); fxcollections.sort(observablelist);
row removal:
@fxml private void handleonremove(final actionevent event) { final observablelist<tmachinetype> selectedindices = tablemachinetype .getselectionmodel().getselecteditems(); final string infotxt = selectedindices.size() + " " + bundle.getstring("message.records_removed"); final list<tmachinetype> deletebuffer = new arraylist<tmachinetype>(); deletebuffer.addall(selectedindices); (final tmachinetype selectedidx : deletebuffer) { selectedidx.manufacturerproperty().unbind(); selectedidx.testertypeproperty().unbind(); deleted.add(selectedidx); observablelist.remove(selectedidx); // tablemachinetype.getitems().remove(selectedidx); } ..
}
removing cellfactory fix problem ! yehu :)
testertype .setcellfactory(new callback<tablecolumn<tmachinetype, string>, tablecell<tmachinetype, string>>() { @override public tablecell<tmachinetype, string> call( final tablecolumn<tmachinetype, string> param) { final tablecell<tmachinetype, string> cell = new tablecell<tmachinetype, string>() { @override protected void updateitem(final string item, final boolean empty) { super.updateitem(item, empty); textproperty().unbind(); if (empty || item == null) { setgraphic(null); settext(null); } if (!empty) { final tmachinetype row = (tmachinetype) gettablerow().getitem(); textproperty().bind( row.testertypeproperty()); } } }; return cell; } });
Comments
Post a Comment