J'écris actuellement un programme avec JavaFX et FXML. Mon problème actuel est que j'ai un FXMLTableView
, qui devrait afficher les traits de deux classes d'objets différents, Stockorder
et Article
, à savoir le nom, l'identifiant et le prix de l'article et combien de cet article sont en stock (qui est défini en stockorder). J'ai actuellement le code suivant:JavaFX Tableview contenant deux types d'objets
Stockorder:
public class Stockorder {
private SimpleStringProperty deliveryState;
private SimpleStringProperty stockOrderId;
private SimpleStringProperty orderdate;
private SimpleStringProperty deliverydate;
private SimpleStringProperty count;
private SimpleStringProperty itemId;
private SimpleStringProperty itemName;
public Stockorder(String deliveryState, String stockOrderId, String orderdate, String deliverydate, String count, String itemId, String itemName) {
this.deliveryState = new SimpleStringProperty(deliveryState);
this.stockOrderId = new SimpleStringProperty(stockOrderId);
this.orderdate = new SimpleStringProperty(orderdate);
this.deliverydate = new SimpleStringProperty(deliverydate);
this.count = new SimpleStringProperty(count);
this.itemId = new SimpleStringProperty(itemId);
this.itemName = new SimpleStringProperty(itemName);
}
public boolean getDeliveryState() {
return Boolean.valueOf(deliveryState.get());
}
public StringProperty getDeliveryStateProperty() {
return deliveryState;
}
public int getStockOrderId() {
return Integer.parseInt(stockOrderId.get());
}
public StringProperty getStockOrderIdProperty() {
return stockOrderId;
}
public String getOrderdate() {
return orderdate.get();
}
public StringProperty getOrderdateProperty() {
return orderdate;
}
public String getDeliverydate() {
return deliverydate.get();
}
public StringProperty getDeliverydateProperty() {
return deliverydate;
}
public int getCount() {
return Integer.parseInt(count.get());
}
public StringProperty getCountProperty() {
return count;
}
public int getItemId() {
return Integer.parseInt(itemId.get());
}
public StringProperty getItemIdProperty() {
return itemId;
}
public String getItemName() {
return itemName.get();
}
public StringProperty getItemNameProperty() {
return itemName;
}
}
Article:
public class Article {
private final SimpleStringProperty articleNr;
private final SimpleStringProperty name;
private final SimpleStringProperty price;
public Article(String articleNr, String name, String price) {
this.articleNr = new SimpleStringProperty(articleNr);
this.name = new SimpleStringProperty(name);
this.price = new SimpleStringProperty(price);
}
public int getArticleNr() {
return Integer.parseInt(articleNr.get());
}
public String getName() {
return name.get();
}
public double getPrice() {
return Double.parseDouble(price.get());
}
public StringProperty getArticleNrProperty(){
return articleNr;
}
public StringProperty getNameProperty(){
return name;
}
public StringProperty getPriceProperty(){
return price;
}
}
EditArticleOverviewControl (FXMLController)
public class EditArticlesOverviewController implements Initializable {
public EditArticlesOverviewController() {
System.out.println("EditArticleOverviewController started");
}
private ApplicationControl applicationControl;
private EditOrderController editOrderController = new EditOrderController();
private String stockOrderURL = "stockorders";
private HttpClient client = new HttpClient();
@FXML
TableView<Article> tableView;
@FXML
TableColumn<Article, String> articleNrColumn;
@FXML
TableColumn<Article, String> nameColumn;
@FXML
TableColumn<Article, String> priceColumn;
@FXML
TableColumn<Stockorder, String> stockColumn;
@FXML
TableColumn<Stockorder, String> minStockColumn;
@FXML
TableColumn<Stockorder, String> addColumn;
@FXML
Button cancelButton;
@Override
public void initialize(URL url, ResourceBundle rb) {
articleNrColumn.setCellValueFactory(cellData -> cellData.getValue().getArticleNrProperty());
nameColumn.setCellValueFactory(cellData -> cellData.getValue().getNameProperty());
priceColumn.setCellValueFactory(cellData -> cellData.getValue().getPriceProperty());
stockColumn.setCellValueFactory(cellData -> cellData.getValue().getCountProperty());
minStockColumn.setCellValueFactory(cellData -> cellData.getValue().getDeliveryStateProperty());
addColumn.setCellValueFactory(cellData -> cellData.getValue().getCountProperty());
}
public void setApplicationControl(ApplicationControl applicationControl) {
this.applicationControl = applicationControl;
}
public void setEntriesInTableView(ObservableList articlesList) {
tableView.setItems(articlesList);
}
@FXML
public void goBack() {
System.out.println("Kein Artikel bearbeitet");
Stage stage = (Stage) cancelButton.getScene().getWindow();
stage.close();
//EditOrder wieder starten vom selben Order wie vorher!!
try {
applicationControl.openEditOrder(applicationControl.order.getOrderNr());
} catch (Exception ex) {
Logger.getLogger(OrdersOverviewController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Maintenant, chaque fois que j'essaie d'exécuter le programme, J'ai l'erreur:
à la ligne où j'ai défini le cellValueFactory
pour stockOrder
. Mais je ne peux pas comprendre pourquoi, comme la colonne contient Stockorder
et cellValueFactory
utilise des méthodes de la classe Stockorder
.
pouvez-vous pointer la ligne? –
stockColumn.setCellValueFactory (cellData -> cellData.getValue(). GetCountProperty()); Celui-là. La quatrième 'setCellValueFactory' dans la classe ** EditArticlesOverviewController * –