我有一个tableview,我在其中显示Alumno的数据(name,lastname ...)。我有不同的列,我从Alumno显示每个字段,一切正常。此外,我想添加一个新列并在单元格内放置一个按钮,用户单击该按钮,会出现一个窗口,显示有关所选项目的信息(也就是所选人员)。
我试试这个,但我不知道错误,因为按钮出现但项目总是返回null:
班级校友
class Alumno
{
private String nombre;
private String apellidos;
getters & setters
}
我将数据显示到表中的类
public class AlumnosPresenter implements Initializable {
@FXML
TableColumn tbcNombre, tbcApellidos, tbcFecha, tbcAsistencia;
@FXML
TableView tbvAlumnos;
private FilteredList<Alumno> datosFiltrados;
private SortedList<Alumno> listaOrdenada;
@Override
public void initialize(URL url, ResourceBundle rb) {
//Link columns with properties
tbcNombre.setCellValueFactory(new PropertyValueFactory<>("nombre"));
tbcApellidos.setCellValueFactory(new PropertyValueFactory<>("apellidos"));
//Assign data to table
datosFiltrados = new FilteredList<>(datamodel.getAlumnos());
//This is to make table searchable
listaOrdenada = new SortedList<>(datosFiltrados);
listaOrdenada.comparatorProperty().bind(tbvAlumnos.comparatorProperty());
tbvAlumnos.setItems(listaOrdenada);
//This show button but item always is null
tbcAsistencia.setCellFactory(new Callback<TableColumn<Alumno, Alumno>, TableCell<Alumno, Alumno>>() {
@Override
public TableCell<Alumno, Alumno> call(TableColumn<Alumno, Alumno> colAsistencia) {
return new TableCell<Alumno, Alumno>() {
@Override
protected void updateItem(Alumno item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
final Button btnAsistencia = new Button("Asistencia");
btnAsistencia.setOnAction((ActionEvent event) -> {
try {
//Where I clic on button, asistencia is not save because item is null
asistenciadao.guardar1(new Asistencia(new AsistenciaId(item, new Date())));
}
catch (ConstraintViolationException e) {
LOG.severe(e.toString());
new Dialogos().mostrarAdvertencia(null, "No se puede registrar más de una asistencia por día y alumno.", "");
}
catch (Exception e) {
LOG.severe(e.toString());
new Dialogos().mostrarExcepcion(null, e);
}
});
setGraphic(btnAsistencia);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
}
};
}
});
}
}
答案 0 :(得分:0)
您需要在表格列上设置cellValueFactory
:
tbcAsistencia.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<Alumno>(cellData.getValue()));
答案 1 :(得分:0)
与@James_D类似的方法回答:
tbcAsistencia.setCellValueFactory(new Callback<CellDataFeatures<Alumno, Alumno>, ObservableValue<Alumno>>() {
@Override
public ObservableValue<Alumno> call(CellDataFeatures<Alumno, Alumno> features) {
return new ReadOnlyObjectWrapper(features.getValue());
}
});