gpt4 book ai didi

JavaFX : Dynamic cell control on button click in Tableview?

转载 作者:行者123 更新时间:2023-12-02 03:45:52 24 4
gpt4 key购买 nike

我一直在 Javafx 中使用 TableView ,并且我想动态控制单击按钮时的单元格,该按钮本身也是 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 列被空的 Progress Bars 填充,其中这是我不想做的。我希望,每当用户单击按钮时,只有该行显示进度条,并将所有其余设置为 setGraphic(null); 。请帮我解决这个问题。!
enter image description here > enter image description here

最佳答案

目前我无法访问我的 IDE,因此我将尝试编写一些纯文本。

单击(任何)下载按钮,您可以为整个列分配一个新的 CellFactory,这不会区分您想要“进行”的行和所有其他行。您的所有记录都引用其 ProgressProperty,但只有您单击的 SharedFileInfo-Row 的一个 ProgressProperty 正在更改。

如果你想继续这样做,在每个 ButtonClick 上添加一个 CellFactory,
(我不建议这样做,因为您也可以设置一次并实现触发器 BooleanProperty 例如)您可以检查单击的按钮行的 SharedFileInfo 实例是否 == 内部 CellFactory 中的 SharedFileInfo 实例

提示:Javafx, get the object referenced by a TableCell

编辑:如何实现目标的一个示例如下:

  1. 创建全局 SharedFileInfo 字段
  2. 在开头设置 CellFactories
  3. Button-Column-Factory:在单击按钮时设置全局字段 = clickedCells SharedFileInfo-instance
  4. Progress-Column-Factory:每个单元格检查其 SharedFileInfo 实例是否 == 全局字段的值,如果是,则显示其进度条

请注意,您可能必须在设置全局字段的值后“告诉”单元格更新其外观。我建议使用全局 Property+ChangeListener。

关于JavaFX : Dynamic cell control on button click in Tableview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com