我正在尝试在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();
}
}
}