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

如何将CellValueFactory设置为javafx中各种属性的函数?,java,javafx,model-view-controller,tableview,Java,Javafx,Model View Controller,Tableview,我在MVC模式下用javafx构建下载管理器时遇到了一些麻烦。我想在TableView中列出下载内容,并在各个列中列出所有属性 假设我有一个这样的模型 class Download{ private SimpleObjectProperty<Integer> part1; private SimpleObjectProperty<Integer> part2; public SimpleObjectProperty<Integer>

我在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;
    }
}
TableView<Download> table=new TableView<Download>();
table.setItems(.. Observable list of Download objects ...);
 TableColumn<Download,Integer> part1 = new TableColumn<Download,Integer>("Part 1 value");
 part1.setCellValueFactory(
            (TableColumn.CellDataFeatures<Download, Integer> download) -> download.getValue().getPart1Property());
类下载{
私有SimpleObject属性第1部分;
私有SimpleObject属性第2部分;
公共SimpleObject属性getPart1Property(){
返回部分1;
}
公共SimpleObject属性getPart2Property(){
返回部分2;
}
}
现在我已经用如下的表视图设置了JavaFXGUI

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

    public SimpleObjectProperty<Integer> getPart1Property(){
        return part1;
    }
    public SimpleObjectProperty<Integer> getPart2Property(){
        return part2;
    }
}
TableView<Download> table=new TableView<Download>();
table.setItems(.. Observable list of Download objects ...);
 TableColumn<Download,Integer> part1 = new TableColumn<Download,Integer>("Part 1 value");
 part1.setCellValueFactory(
            (TableColumn.CellDataFeatures<Download, Integer> download) -> download.getValue().getPart1Property());
TableView table=newtableview();
表.setItems(…下载对象的可观察列表…);
如果我想在表视图中为part1的值添加一列,我可以这样做

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

    public SimpleObjectProperty<Integer> getPart1Property(){
        return part1;
    }
    public SimpleObjectProperty<Integer> getPart2Property(){
        return part2;
    }
}
TableView<Download> table=new TableView<Download>();
table.setItems(.. Observable list of Download objects ...);
 TableColumn<Download,Integer> part1 = new TableColumn<Download,Integer>("Part 1 value");
 part1.setCellValueFactory(
            (TableColumn.CellDataFeatures<Download, Integer> download) -> download.getValue().getPart1Property());
TableColumn第1部分=新的TableColumn(“第1部分值”);
第1部分:设置单元值工厂(
(TableColumn.CellDataFeatures下载)->下载.getValue().getPart1Property());
现在我需要在表视图中显示part1和part2的值之和的列如何在javafx中实现这一点?


我读过这些文件,但遗憾的是,我找不到任何方法来实现这一点。任何帮助都将不胜感激。

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

TableColumn<Download, Integer> totalCol = new TableColumn<>("Total");
        totalCol.setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue().getPart1() + param.getValue().getPart2()));
TableColumn totalCol=新的TableColumn(“总计”);
totalCol.setCellValueFactory(参数->新建SimpleObject属性(参数.getValue().getPart1()+参数.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);
        }
    }
}
导入javafx.application.application;
导入javafx.beans.property.SimpleObject属性;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.stage.stage;
公共类CustomCellValueFactoryDemo扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ObservableList downloads=FXCollections.observableArrayList();
下载.添加(新下载(23,56));
新增(新下载(56,43));
添加(新下载(97,3));
新增(新下载(67,23));
TableView TableView=新建TableView();
TableColumn part1Col=新的TableColumn(“Part1”);
part1Col.setCellValueFactory(参数->参数.getValue().part1Property());
TableColumn part2Col=新的TableColumn(“第2部分”);
part2Col.setCellValueFactory(param->param.getValue().part2Property());
TableColumn totalCol=新的TableColumn(“总计”);
totalCol.setCellValueFactory(参数->新建SimpleObject属性(参数.getValue().getPart1()+参数.getValue().getPart2());
tableView.getColumns().addAll(part1Col、part2Col、totalCol);
tableView.setItems(下载);
场景sc=新场景(tableView);
初生阶段:西新统(sc);
primaryStage.show();
}
类下载{
SimpleObjectProperty part1=新的SimpleObjectProperty(0);
SimpleObjectProperty part2=新的SimpleObjectProperty(0);
公开下载(INTP1,INTP2){
第1部分:集合(p1);
第二部分:集合(p2);
}
public int getPart1(){
返回part1.get();
}
公共SimpleObject属性part1Property(){
返回部分1;
}
公共无效集合第1部分(内部第1部分){
本.第1部分.集(第1部分);
}
公共int getPart2(){
返回part2.get();
}
公共SimpleObject属性part2Property(){
返回部分2;
}
公共无效集合第2部分(内部部分第2部分){
本.第2部分.集(第2部分);
}
}
}

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

TableColumn<Download, Integer> totalCol = new TableColumn<>("Total");
        totalCol.setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue().getPart1() + param.getValue().getPart2()));
TableColumn totalCol=新的TableColumn(“总计”);
totalCol.setCellValueFactory(参数->新建SimpleObject属性(参数.getValue().getPart1()+参数.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);
        }
    }
}
导入javafx.application.application;
导入javafx.beans.property.SimpleObject属性;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.stage.stage;
公共类CustomCellValueFactoryDemo扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ObservableList downloads=FXCollections.observableArrayList();
下载.添加(新下载(23,56));
新增(新下载(56,43));
添加(新下载(97,3));
新增(新下载(67,23));
TableView TableView=新建TableView();
TableColumn part1Col=新的TableColumn(“Part1”);
part1Col.setCellValueFactory(参数->参数.getValue().part1Property());
TableColumn part2Col=新的TableColumn(“第2部分”);
part2Col.setCellValueFactory(param->param.getValue().part2Property());
TableColumn totalCol=新的TableColumn(“总计”);
totalCol.setCellValueFactory(参数->新建SimpleObject属性(参数.getValue().getPart1()+参数.getValue().getPart2());
tableView.getColumns().addAll(part1Col、part2Col、totalCol);
tableView.setItems(下载);
场景sc=新场景(tableView);
初生阶段:西新统(sc);
primaryStage.show();
}
类下载{
SimpleObjectProperty part1=新的SimpleObjectProperty(0);
SimpleObjectProperty part2=新的SimpleObjectProperty(0);
公开下载(INTP1,INTP2){
第1部分:集合(p1);
第二部分:集合(p2);
}
public int getPart1(){
返回part1.get();
}
公共SimpleObject属性part1Property(){
返回部分1;