如何将CellValueFactory设置为javafx中各种属性的函数?
我在MVC模式下用javafx构建下载管理器时遇到了一些麻烦。我想在TableView中列出下载内容,并在各个列中列出所有属性 假设我有一个这样的模型如何将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>
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;