我试图在TableView中实现以下功能:
prod_name | prod_comment | ... | kcal | kjoule |
--------------------------------------------
name | hi | | 1.5 | 5
name | hi | | 2.0 | 7
这些是我合作过的模特:
Product (holds things like name,comment etc)
Nutrient (holds the kcal, kjoule strings etc)
Product_Nutrient (holds the amounts of kcal, kjoule etc for every product)
我目前拥有的是一个DAO(和一个单独的模型)层,它连接所有这些表并以上面的确切格式返回它们,但对于这个项目不允许使用SQL加入(学校项目)。我并不认为这会成为一个问题,但现在确实如此。
我还试图将这三个模型作为列表包装到一个模型中,但我不确定如何保持模型之间的关系,以及如何在{{1}中显示它们}。 (same as shown here)
如果有任何不清楚的地方,请告诉我,以便我可以添加更多信息。
EDIT;
有些澄清:
某些TableView
可能不会Product
Nutrient
例如:
ProductNutrient
此处prod_id | nutrient_id | amount |
1 1 0.0
1 2 5.1
2 1 1.4
3 1 0.2
3 2 0.0
2没有prod_id
2,因为nutrient_id
与不存在的不同。
编辑:
型号:
0.0
答案 0 :(得分:1)
我将这些类定义为
public class Product {
private int id ;
private String name ;
private String comment ;
// constructor and get methods
}
public class Nutrient {
private int id ;
private String name ;
private double kcal ;
// ...
}
public class ProductNutrientContent {
private Product product ;
private Nutrient nutrient ;
private double quantity ;
// ...
}
您不能使用内部联接的要求非常人为,但只要数据库不是太大,您就可以使用三个查询来获取ProductNutrient
个对象的列表,如下所示: / p>
Map<Integer, Product> productsById ;
Map<Integer, Nutrient> nutrientsById ;
List<ProductNutientContent> productNutrientContents ;
// query product table, for each row in the result set do:
Product product = new Product(/* data from result set row */);
productsById.put(product.getId(), product);
// similarly populate nutrientsById...
// query join table, for each row in join table do:
int productId = ... ; // productId from row in result set
int nutrientId = ... ; // nutrientId from row in result set
double quantity = ... ; // quantity from row in result set
ProductNutrientContent content
= new ProductNutrientContent(productsById.get(productId), nutrientsById.get(nutrientId), quantity);
productNutrientContents.add(content);
现在您可以使用列表填充表格。对于表格列,只需做一件明显的事情:
TableColumn<ProductNutrientContent, String> productNameColumn = new TableColumn<>("Product");
productNameColumn.setCellValueFactory(cellData ->
new SimpleStringProperty(cellData.getValue().getProduct().getName()));
TableColumn<ProductNutrientContent, Number> kcalColumn = new TableColumn<>("kcal");
kcalColumn.setCellValueFactory(cellData ->
new SimpleDoubleProperty(cellData.getValue().getNutrient().getKcal()));
TableColumn<ProductNutrientContent, Number> quantityColumn = new TableColumn<>("Quantity");
quantityColumn.setCellValueFactory(cellData ->
new SimpleDoubleProperty(cellData.getValue().getQuantity());