私はJavafxのTable Viewで作業していましたが、それ自体がTable Viewの一部であるボタンクリックでセルを動的に制御したいと思います。私はそれを自分自身でやろうとしましたが、そのようには動作しませんでした。それで、できないように助けが必要です。JavaFX:Tableviewのボタンをクリックすると動的なセルコントロールが可能ですか?
ボタンのTableCellコード:ボタンをクリックする前に
dlColumn.setCellValueFactory(new PropertyValueFactory<>(""));
dlColumn.setCellFactory(new Callback<TableColumn<SharedFileInfo, String>, TableCell<SharedFileInfo, String>>() {
@Override
public TableCell<SharedFileInfo, String> call(TableColumn<SharedFileInfo, String> param) {
final TableCell<SharedFileInfo, String> cell;
cell = new TableCell<SharedFileInfo, String>() {
final Button downloadButton = new Button();
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
setText(null);
} else {
downloadButton.setOnAction((ActionEvent ae) -> {
progressColumn.setCellValueFactory(new PropertyValueFactory<>("progress"));
progressColumn.setCellFactory(new Callback<TableColumn<SharedFileInfo, Double>, TableCell<SharedFileInfo, Double>>() {
@Override
public TableCell<SharedFileInfo, Double> call(TableColumn<SharedFileInfo, Double> param) {
final ProgressBar progressBar = new ProgressBar();
final TableCell<SharedFileInfo, Double> cell;
cell = new TableCell<SharedFileInfo, Double>() {
@Override
protected void updateItem(Double item, boolean empty) {
super.updateItem(item, true);
if (empty) {
setGraphic(null);
setText(null);
} else {
SharedFileInfo sharedinfo = getTableView().getItems().get(this.getIndex());
progressBar.progressProperty().bind(sharedinfo.getProgress());
setGraphic(progressBar);
progressBar.prefWidthProperty().bind(this.widthProperty());
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
}
};
return cell;
}
});
});
setGraphic(downloadButton);
setText(null);
}
}
};
return cell;
}
});
、すべてが期待通りに動作しているようですが、私はボタンをクリックすると、全体progress
列がどのようなIドンである空のProgress Bars
で満たされますしたくない。私は、ユーザーがボタンをクリックするたびに、その行だけがProgress Bar
を表示し、すべてのレストがsetGraphic(null);
に設定されたいと思っています。これで私を助けてください!
>
私は投稿後に私の質問をチェックすることができませんでしたので、私は希望の仕事をすることができるいくつかの方法を考えています。私はここにテーブル全体を表示していませんが、すべての場合に静的に(一度作成され、レンダリング中に)なる名前の列もあります。だから、私は明示的にそれのためのセルファクトリーを提供し、 'setProgress(2);'名前セルがレンダリングされるたびに設定します。ですから、Progress-Cell-Factoryが== 2、 'setGraphic(null)'、 'setGraphic(progressBar)'のときにprogressプロパティのこの振る舞いをクロスチェックすることができます。 – androizer
私は一日待って、他のユーザーが他の方法がある場合は回答を出させ、そうでなければ私は答えを最終としてマークします。 – androizer