gpt4 book ai didi

java - 如何将CellValueFactory设置为javafx中各种属性的函数?

转载 作者:行者123 更新时间:2023-12-01 17:49:04 25 4
gpt4 key购买 nike

我当时正在 MVC 模式下用 javafx 构建一个下载管理器,但遇到了一些麻烦。我想在 TableView 中列出下载,并在各个列中列出所有属性。

假设我有一个这样的模型。

class Download{
private SimpleObjectProperty<Integer> part1;
private SimpleObjectProperty<Integer> part2;

public SimpleObjectProperty<Integer> getPart1Property(){
return part1;
}
public SimpleObjectProperty<Integer> getPart2Property(){
return part2;
}
}

现在我已经用这样的表格 View 设置了 javafx GUI。

TableView<Download> table=new TableView<Download>();
table.setItems(.. Observable list of Download objects ...);

如果我想在 TableView 中为part1的值添加一列,我可以这样做。

 TableColumn<Download,Integer> part1 = new TableColumn<Download,Integer>("Part 1 value");
part1.setCellValueFactory(
(TableColumn.CellDataFeatures<Download, Integer> download) -> download.getValue().getPart1Property());

现在我需要在 TableView 中显示一列来显示part1 和part2 值的总和如何在 javafx 中实现此目的?

我已阅读文档 here但遗憾的是我找不到任何方法可以实现这一点。任何帮助将不胜感激。

最佳答案

您需要返回 cellValueFactory 中所需值的总和。

TableColumn<Download, Integer> totalCol = new TableColumn<>("Total");
totalCol.setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue().getPart1() + param.getValue().getPart2()));

完整的工作演示如下:

import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class CustomCellValueFactoryDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
ObservableList<Download> downloads = FXCollections.observableArrayList();
downloads.add(new Download(23,56));
downloads.add(new Download(56,43));
downloads.add(new Download(97,3));
downloads.add(new Download(67,23));

TableView<Download> tableView = new TableView<>();
TableColumn<Download, Integer> part1Col = new TableColumn<>("Part 1");
part1Col.setCellValueFactory(param -> param.getValue().part1Property());

TableColumn<Download, Integer> part2Col = new TableColumn<>("Part 2");
part2Col.setCellValueFactory(param -> param.getValue().part2Property());

TableColumn<Download, Integer> totalCol = new TableColumn<>("Total");
totalCol.setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue().getPart1() + param.getValue().getPart2()));


tableView.getColumns().addAll(part1Col,part2Col, totalCol);
tableView.setItems(downloads);

Scene sc = new Scene(tableView);
primaryStage.setScene(sc);
primaryStage.show();
}

class Download{
SimpleObjectProperty<Integer> part1 = new SimpleObjectProperty<>(0);
SimpleObjectProperty<Integer> part2= new SimpleObjectProperty<>(0);
public Download(int p1, int p2){
part1.set(p1);
part2.set(p2);

}

public int getPart1() {
return part1.get();
}

public SimpleObjectProperty<Integer> part1Property() {
return part1;
}

public void setPart1(int part1) {
this.part1.set(part1);
}

public int getPart2() {
return part2.get();
}

public SimpleObjectProperty<Integer> part2Property() {
return part2;
}

public void setPart2(int part2) {
this.part2.set(part2);
}
}
}

关于java - 如何将CellValueFactory设置为javafx中各种属性的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52398457/

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