如何在TableColumn中显示对象

时间:2017-03-31 19:51:01

标签: java javafx fxml

嘿,大家都试图在另一个内部显示一个对象的属性,以使其更清晰,我有一个类Produit定义如下:

public class Produit {
private int idproduit;
private float prixunitaire;
private String designation;
private String description;
private boolean etatp;
private Bondereduction bondereductions;
private String lienimg;
private Categorie categories;

}

有吸气剂和制定者......

我试图在TableView中显示这些数据,我用它来做这个

public class UpdateProdController implements Initializable {

@FXML
private TableColumn prixunitaire;
@FXML
private TableColumn description;
@FXML
private TableColumn designation;
@FXML
private TableColumn<Categorie,String> categorie;
@FXML
private TableColumn<Bondereduction, String> sommereduction;
@FXML
private TableColumn img;

ObservableList<Produit> prodList = FXCollections.observableArrayList();
@FXML
private TableView<Produit> updatetable;
String xx="";
/**
 * Initializes the controller class.
 */
@Override
public void initialize(URL url, ResourceBundle rb) {



  ProduitService pss = new ProduitService();
    prodList = pss.SelectProduits();
    //String des =prodList.get(0).getCategories().getDesignation().;
    System.out.println("sqsdqsdqsd   " + prodList);


    updatetable.setItems(prodList);
    prixunitaire.setCellValueFactory(new PropertyValueFactory<>("prixunitaire"));
    description.setCellValueFactory(new PropertyValueFactory<>("description"));
    designation.setCellValueFactory(new PropertyValueFactory<>("designation"));
   sommereduction.setCellValueFactory(new PropertyValueFactory<>("Bondereduction.sommereduction"));
   categorie.setCellValueFactory(new PropertyValueFactory<>("Categorie.designation"));

    img.setCellValueFactory(new PropertyValueFactory<>("lienimg"));
}

当我执行此代码时,我只获得categoriesommereduction TableColumn为空,问题出现在这两行中

   sommereduction.setCellValueFactory(new PropertyValueFactory<>("Bondereduction.sommereduction"));
   categorie.setCellValueFactory(new PropertyValueFactory<>("Categorie.designation"));

任何人都可以帮助我如何更改PropertyValueFactory<>以获取对象而不是字符串,这样就可以理解我试图在对象中显示一个字段。感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

你需要进一步深入了解PropertyValueFactory<>这样的事情:

sommereduction.setCellValueFactory(
        Produit -> {
            SimpleObjectProperty property = new SimpleObjectProperty();
            property.setValue(Produit.getValue().getBondereduction().getSommereduction()));
            return property;
        }
);

这应该做你需要的。这基本上就是你所做的,只是它更进了一步。

它会创建一个新的SimpleObjectProperty,然后使用Produit类来抓取Bondereduction,并使用该值返回sommereduction

我还建议更改

@FXML
private TableColumn<Categorie,String> categorie;
@FXML
private TableColumn<Bondereduction, String> sommereduction;

@FXML
private TableColumn<Produit,String> categorie;
@FXML
private TableColumn<Produit, String> sommereduction;

因为那是你试图展示的课程。