JavaFx总是取消选中TableView中的CheckBox

时间:2016-08-04 18:30:25

标签: checkbox javafx tableview

我正在尝试在tableview中创建可编辑的复选框,但它始终显示未选中的复选框,无论选择"选择"对象中的值。有人会暗示我的代码中有什么问题吗? (它适用于所有其他列)

的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控制器:

    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(用于获取值,然后将其添加到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();
        }
    }
}

0 个答案:

没有答案