私はObservableListに裏打ちされたテーブルビューがあります。なぜ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;
// ...
}
を私がテーブルビューから選択されたすべてのアイテムを取得します
複数の選択を有効にして、実際には選択したレンダラーが適切なカウントを表示していますが、ループは一度実行する。
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