jeudi 4 août 2016

JavaFx always unchecked CheckBox in TableView

I am trying to make editable checkbox in a tableview, but it always display unchecked checkbox no matter the "selected" value in the object. Could someone hint me what is wrong in my code please? (it works for all others columns)

DataModel:

public class Kosmetyk 
{
    private final SimpleIntegerProperty lp;
    private final SimpleStringProperty nazwa;
    private final SimpleDoubleProperty cena;
    private final SimpleStringProperty uwagi;
    private final SimpleBooleanProperty czyZakupiono;

    public Kosmetyk(Integer lp, String nazwa, Double cena, String uwagi, Boolean czyZakupiono) 
    {
        super();
        this.lp = new SimpleIntegerProperty(lp);
        this.nazwa = new SimpleStringProperty(nazwa);
        this.cena = new SimpleDoubleProperty(cena);
        this.uwagi = new SimpleStringProperty(uwagi);
        this.czyZakupiono = new SimpleBooleanProperty(czyZakupiono);
    }

    public Integer getLp() 
    {
        return lp.get();
    }

    public String getNazwa() 
    {
        return nazwa.get();
    }

    public Double getCena() 
    {
        return cena.get();
    }

    public String getUwagi() 
    {
        return uwagi.get();
    }

    public Boolean getCzyZakupiono()
    {
        return czyZakupiono.get();
    }

    public void setNazwa(String nazwa)
    {
        this.nazwa.set(nazwa);
    }

    public void setCena(Double cena)
    {
        this.cena.set(cena);
    }

    public void setUwagi(String uwagi)
    {
        this.uwagi.set(uwagi);
    }

    public void setCzyZakupiono(Boolean czyZakupiono)
    {
        this.czyZakupiono.set(czyZakupiono);
    }
}    

TableView controller:

    public class SecondController implements Initializable
{
    @FXML private TableView<Kosmetyk> tabela;
    @FXML private TableColumn<Kosmetyk, Integer> lp;
    @FXML private TableColumn<Kosmetyk, String> nazwa;
    @FXML private TableColumn<Kosmetyk, Double> cena;
    @FXML private TableColumn<Kosmetyk, String> uwagi;
    @FXML private TableColumn<Kosmetyk, Boolean> czyZakupiono;// = new TableColumn<>("");
    @FXML private Button buttonCancelMain;
    @FXML private Button buttonAdd;
    @FXML private Button buttonDelete;

    String COMMA_DELIMITTER = ";";
    String NEW_LINE_SEPARATOR = "\n";
    String FILE_HEADER = "Lp.;Nazwa;Cena;Uwagi;Zakupiono";

    private static ObservableList<Kosmetyk> ViewAble = FXCollections.observableArrayList();

        public void Add(Kosmetyk kosmetyk) 
        {
            ViewAble.add(kosmetyk);
        }

    @Override
    public void initialize(URL location, ResourceBundle resources) 
    {
        tabela.setEditable(true);
        lp.setSortable(false);
        lp.setCellValueFactory(column-> new ReadOnlyObjectWrapper<Integer>(tabela.getItems().indexOf(column.getValue()) + 1));
        nazwa.setCellValueFactory(new PropertyValueFactory<Kosmetyk, String>("nazwa"));
        cena.setCellValueFactory(new PropertyValueFactory<Kosmetyk, Double>("cena"));
        uwagi.setCellValueFactory(new PropertyValueFactory<Kosmetyk, String>("uwagi"));
        czyZakupiono.setCellValueFactory(new PropertyValueFactory<Kosmetyk, Boolean>("czyZakupiono"));
        czyZakupiono.setCellFactory(CheckBoxTableCell.forTableColumn(czyZakupiono));

        tabela.setItems(ViewAble);
        //tabela.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        tabela.getSelectionModel().clearSelection();

        nazwa.setCellFactory(TextFieldTableCell.<Kosmetyk>forTableColumn());
        nazwa.setOnEditCommit
            (
                    (CellEditEvent<Kosmetyk, String> t) ->
                    {
                        ((Kosmetyk) t.getTableView().getItems().get(t.getTablePosition().getRow())).setNazwa(t.getNewValue());;
                    }
            );
        cena.setCellFactory(TextFieldTableCell.<Kosmetyk, Double>forTableColumn(new DoubleStringConverter()));
        cena.setOnEditCommit
        (
                (CellEditEvent<Kosmetyk, Double> t) ->
                {
                    ((Kosmetyk) t.getTableView().getItems().get(t.getTablePosition().getRow())).setCena(t.getNewValue());;
                }
        );

        uwagi.setCellFactory(TextFieldTableCell.<Kosmetyk>forTableColumn());
        uwagi.setOnEditCommit
        (
                (CellEditEvent<Kosmetyk, String> t) ->
                {
                    ((Kosmetyk) t.getTableView().getItems().get(t.getTablePosition().getRow())).setUwagi(t.getNewValue());;
                }
        );

    }
}

AddControler (used to get values and then add it to tableview):

public class AddController 
{
    @FXML private TextField txtNazwa;
    @FXML private TextField txtCena;
    @FXML private TextField txtUwagi;
    @FXML private CheckBox cboxKupione;
    @FXML private Button buttonCancelAdd;
    @FXML private Button buttonAddWish;

    SecondController SC = new SecondController();

    public void AddWish() 
    {
        if(txtNazwa.getText().length() > 0 && txtCena.getText().length() > 0 && txtUwagi.getText().length() > 0)
        {
            SC.Add(new Kosmetyk(0, txtNazwa.getText(), Double.valueOf(txtCena.getText()), txtUwagi.getText(), Boolean.valueOf(cboxKupione.isSelected())));
            buttonAddWish.getScene().getWindow().hide();
        }
    }
}




Aucun commentaire:

Enregistrer un commentaire