가 I가 ObservableList하여있는 TableView를 백업 한 :JavaFX TableView에서 선택한 항목의 목록을 복사해야하는 이유는 무엇입니까?
private ObservableList<Renderer> renderers = FXCollections.observableArrayList();
@FXML
private TableView<Renderer> renderersTable;
@FXML
private TableColumn<Renderer, String> nameColumn;
@FXML
private TableColumn<Renderer, Boolean> approvedColumn;
@FXML
private void initialize() {
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
approvedColumn.setCellValueFactory(new PropertyValueFactory<>("approved"));
renderersTable.setItems(this.renderers);
}
렌더러 객체는 매우 간단하며 다음과 같이 :
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Renderer extends Model {
private String name;
private boolean approved;
// ...
}
을 코드의이 작품에서 나는 얻을의 TableView에서 선택한 모든 항목 처리 :
private void approveSelectedRenderers() {
ObservableList<Renderer> selectedRenderers = renderersTable.getSelectionModel().getSelectedItems();
for (Renderer renderer : selectedRenderers) {
renderer.setApproved(true);
renderers.set(renderers.indexOf(renderer), renderer);
}
}
다중 선택을 사용하도록 설정했으며 실제로 선택한 순환자가 적절한 개수를 표시하지만 루프는 한 번 실행. 대신 경우
나는 다음과 같이 복사본을 만들 : 그것은 올바른 작동하고 모든 항목이 처리되는private void approveSelectedRenderers() {
// Get all the selected renderers but copy them.
List<Renderer> selectedRenderers = new ArrayList<>();
selectedRenderers.addAll(renderersTable.getSelectionModel().getSelectedItems());
for (Renderer renderer : selectedRenderers) {
renderer.setApproved(true);
renderers.set(renderers.indexOf(renderer), renderer);
}
}
. 무슨 일이야? 이것을 다루는 적절한 방법은 무엇입니까?
데이터 구조에 대한 'allRenderes'는 무엇입니까? 그것은 별도의 데이터 구조 또는'TableView'의 (관찰 가능한) 백업 데이터 구조입니까? – n247s
다른 질문에서와 같이, 어떤 일도 할 필요가 없습니다. 게시하지 않은 코드의 다른 부분에서 오류가 발생하여 이러한 불필요한 작업을 뛰어 넘어야한다고 생각하게됩니다. –
@ n247s : 관찰 가능한 TableView를지지합니다. – Pablo