저는 JavaFX를 처음 접했고 JavaFX에서이 원리를 달성하려고합니다. Student 객체로 채워진 TableView가 있습니다. 첫 번째 열을 선택한 항목에 대해 대량 작업을 수행하기 위해 각 행을 선택할 수있는 확인란으로 지정해야합니다 (일반적으로 메일 응용 프로그램과 같이 표시됨).JavaFX TableView를 사용하여 목록을 채우는 체크 박스
나는보기 레이어에서만 사용되므로 SimpleBooleanProperty를 Student 클래스에 추가하면 안된다. 그래서 나는 이것을 다음과 같이 구현할 수 있다고 생각했다 : 체크 박스를 선택하면 학생이 추가된다. 목록 selectedStudents; 선택을 취소하면 제거됩니다. 이것은 좋은 접근 방법입니까?
private class CheckBoxCell extends TableCell<Student, Boolean> {
final CheckBox cellCheckBox = new CheckBox();
CheckBoxCell(final TableView tblView) {
cellCheckBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
int selectedIndex = getTableRow().getIndex();
if (!cellCheckBox.isSelected()) {
getModel().selectStudent(selectedIndex); // add to selectedStudents
} else {
getModel().deselectStudent(selectedIndex); // remove from selectedStudents
}
}
});
}
//Display button if the row is not empty
@Override
protected void updateItem(Boolean t, boolean empty) {
super.updateItem(t, empty);
if (!empty) {
setGraphic(cellCheckBox);
}
}
}
이 코드의 주요 문제이다 -
voornaamKolom.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
familienaamKolom.setCellValueFactory(new PropertyValueFactory<Student, String>("fname"));
promotorKolom.setCellValueFactory(new PropertyValueFactory<Student, String>("comment"));
selectedKolom.setCellValueFactory(
new Callback<TableColumn.CellDataFeatures<Student, Boolean>, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Student, Boolean> p) {
return new SimpleBooleanProperty(p.getValue() != null);
}
});
selectedKolom.setCellFactory(
new Callback<TableColumn<Student, Boolean>, TableCell<Student, Boolean>>() {
@Override
public TableCell<Student, Boolean> call(TableColumn<Student, Boolean> p) {
return new CheckBoxCell(studentenTabel);
}
});
studentenTabel.getItems().setAll(getModel().getStudenten());
가 :
이
내가 (주로 유사한 솔루션에서 복사 붙여 넣기 기준)까지있어 코드입니다 확인란은 테이블 행에 바인딩되지 않습니다. 예 : 두 번째 항목을 선택하고 다른 값을 기준으로 정렬하여 행 순서를 변경하면 두 번째 항목은 다른 개체를 나타내는 경우에도 여전히 선택됩니다. 새로운 행이 테이블에 추가되면 그 중 일부는 무작위로 선택됩니다.나는이 코드가 아마도 더러운 것이라고 알고있다. 나는 JavaFX에 익숙하지 않다. 어떤 도움을 주시면 감사하겠습니다.
미리 감사드립니다.
좋은 소리지만, selectedIndex의 내가 getTableRow()에 할당 된 변수입니다. getIndex() 라인에서 위 및 방법 getTableRow() 존재없는 것 같다.으로 getObject()을. 대신 무엇을 사용할 수 있습니까? – lukasvo
'getTableRow(). getItem()'을 사용하면 현재 행에서'Student' 객체를 얻을 수 있습니다. 그러나 내 (다소 다른) 솔루션을보십시오. –
James_D가 말했듯이, 그것은'getTableRow(). getItem()'입니다. –