java - How to edit default render behaviour of ComboBoxTableCell in JavaFX 2? -


by default comboboxtablecell rendered label when not being edited. want change behaviour rendered combobox time. couldn't find out how.

basically have tableview. of columns of type combobox. want combobox node shown always.

vartypecol.setcellvaluefactory(new propertyvaluefactory<globalvariable, string>("vartype")); vartypecol.setcellfactory(new callback<tablecolumn<globalvariable, string>, tablecell<globalvariable, string>>() {        @override       public tablecell<globalvariable, string> call(tablecolumn<globalvariable, string> p) {             return new comboboxtablecell<globalvariable, string>(fxcollections.observablearraylist("string", "integer"));       } }); 

you need implement own tablecell. like

public class livecomboboxtablecell<s,t> extends tablecell<s, t> {      private final combobox<t> combobox ;      public livecomboboxtablecell(observablelist<t> items) {         this.combobox = new combobox<>(items);          setcontentdisplay(contentdisplay.graphic_only);          combobox.valueproperty().addlistener(new changelistener<t>() {             @override             public void changed(observablevalue<? extends t> obs, t oldvalue, t newvalue) {                 // attempt update property:                 observablevalue<t> property = gettablecolumn().getcellobservablevalue(getindex());                 if (property instanceof writablevalue) {                     ((writablevalue<t>) property).setvalue(newvalue);                 }             }         });     }      @override     public void updateitem(t item, boolean empty) {         super.updateitem(item, empty);         if (empty) {             setgraphic(null);         } else {             combobox.setvalue(item);             setgraphic(combobox);         }     } } 

here sscce:

import javafx.application.application; import javafx.beans.property.simplestringproperty; import javafx.beans.property.stringproperty; import javafx.beans.value.changelistener; import javafx.beans.value.observablevalue; import javafx.beans.value.writablevalue; import javafx.collections.fxcollections; import javafx.collections.observablelist; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.scene.scene; import javafx.scene.control.button; import javafx.scene.control.combobox; import javafx.scene.control.contentdisplay; import javafx.scene.control.tablecell; import javafx.scene.control.tablecolumn; import javafx.scene.control.tableview; import javafx.scene.control.cell.propertyvaluefactory; import javafx.scene.layout.borderpane; import javafx.stage.stage; import javafx.util.callback;  public class livecomboboxtablecellexample extends application {      @override     public void start(stage primarystage) {         tableview<item> table = new tableview<>();          tablecolumn<item, string> typecol = new tablecolumn<>("type");         typecol.setcellvaluefactory(new propertyvaluefactory<>("type"));         tablecolumn<item, string> valuecol = new tablecolumn<>("value");         valuecol.setcellvaluefactory(new propertyvaluefactory<>("value"));          table.getcolumns().add(typecol);         table.getcolumns().add(valuecol);          typecol.setcellfactory(new callback<tablecolumn<item, string>, tablecell<item, string>>() {              @override             public tablecell<item, string> call(tablecolumn<item, string> param) {                 return new livecomboboxtablecell<>(fxcollections.observablearraylist("string", "integer"));             }          });          (int = 1 ; <= 10; i++) {             table.getitems().add(new item( (i % 2 == 0 ? "string" : "integer"), "item "+i));         }          button checkbutton = new button("run check");         checkbutton.setonaction(new eventhandler<actionevent>() {              @override             public void handle(actionevent event) {                 (item item : table.getitems()) {                     system.out.println(item.gettype() + " : "+item.getvalue());                 }                 system.out.println();             }          });          borderpane root = new borderpane();         root.setcenter(table);         root.setbottom(checkbutton);         scene scene = new scene(root, 600, 400);         primarystage.setscene(scene);         primarystage.show();     }      public static class livecomboboxtablecell<s,t> extends tablecell<s, t> {          private final combobox<t> combobox ;          public livecomboboxtablecell(observablelist<t> items) {             this.combobox = new combobox<>(items);              setcontentdisplay(contentdisplay.graphic_only);              combobox.valueproperty().addlistener(new changelistener<t>() {                 @override                 public void changed(observablevalue<? extends t> obs, t oldvalue, t newvalue) {                     // attempt update property:                     observablevalue<t> property = gettablecolumn().getcellobservablevalue(getindex());                     if (property instanceof writablevalue) {                         ((writablevalue<t>) property).setvalue(newvalue);                     }                 }             });         }          @override         public void updateitem(t item, boolean empty) {             super.updateitem(item, empty);             if (empty) {                 setgraphic(null);             } else {                 combobox.setvalue(item);                 setgraphic(combobox);             }         }     }      public static class item {         private final stringproperty type = new simplestringproperty();         private final stringproperty value = new simplestringproperty();          public item(string type, string value) {             settype(type);             setvalue(value);         }          public final stringproperty typeproperty() {             return this.type;         }          public final string gettype() {             return this.typeproperty().get();         }          public final void settype(final string type) {             this.typeproperty().set(type);         }          public final stringproperty valueproperty() {             return this.value;         }          public final string getvalue() {             return this.valueproperty().get();         }          public final void setvalue(final string value) {             this.valueproperty().set(value);         }       }      public static void main(string[] args) {         launch(args);     } } 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -