I created a tableview in scenebuilder and Ive been trying to add items to a tableView to however I am running into the Can not retrieve property variable in propertyValueFactory) for every variable i have. I belive i have everything correct but i cant see whats wrong in this case Here is the item class:
package application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
public class Item {
private SimpleIntegerProperty id;
private SimpleStringProperty name;
private SimpleIntegerProperty cost;
private SimpleIntegerProperty salePrice;
private SimpleIntegerProperty amount;
private SimpleIntegerProperty totalCost;
private SimpleIntegerProperty totalSalePrice;
public Item(int id, String name, int cost, int salePrice, int amount, int totalCost, int totalSalePrice) {
super();
this.id = new SimpleIntegerProperty(id);
this.name = new SimpleStringProperty(name);
this.cost = new SimpleIntegerProperty(cost);
this.salePrice = new SimpleIntegerProperty(salePrice);
this.amount = new SimpleIntegerProperty(amount);
this.totalCost = new SimpleIntegerProperty(totalCost);
this.totalSalePrice = new SimpleIntegerProperty(totalSalePrice);
}
public int getId() {
return id.get();
}
public void setId(int id) {
this.id = new SimpleIntegerProperty(id);
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name = new SimpleStringProperty(name);
}
public int getCost() {
return cost.get();
}
public void setCost(int cost) {
this.cost = new SimpleIntegerProperty(cost);
}
public int getSalePrice() {
return salePrice.get();
}
public void setSalePrice(int salePrice) {
this.salePrice = new SimpleIntegerProperty(salePrice);
}
public int getAmount() {
return amount.get();
}
public void setAmount(int amount) {
this.amount = new SimpleIntegerProperty(amount);
}
public int getTotalCost() {
return totalCost.get();
}
public void setTotalCost(int totalCost) {
this.totalCost = new SimpleIntegerProperty(totalCost);
}
public int getTotalSalePrice() {
return totalSalePrice.get();
}
public void setTotalSalePrice(int totalSalePrice) {
this.totalSalePrice = new SimpleIntegerProperty(totalSalePrice);
}`
` and here is the controller class
package application;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
// used this video for this tablevie stuff https://www.youtube.com/watch?v=vAmyTJyFXe4
public class InventorySystemController implements Initializable{
private Stage stage;
private Scene scene;
private Parent root;
@FXML
private Button removeInventory;
@FXML
private Button addInventory;
@FXML
private TableView<Item> table;
@FXML
private TableColumn<Item,Integer> costColumn;
@FXML
private TableColumn<Item,String> nameColumn;
@FXML
private TableColumn<Item,Integer> totalCostColumn;
@FXML
private TableColumn<Item,Integer> amountColumn;
@FXML
private TableColumn<Item,Integer> totalSalePriceColumn;
@FXML
private TableColumn<Item,Integer> saleColumn;
@FXML
private TableColumn<Item,Integer> idColumn;
@FXML
void swicthToAdd(ActionEvent event) throws IOException {
// from youtube video https://www.youtube.com/watch?v=hcM-R-YOKkQ
Parent root = FXMLLoader.load(getClass().getResource("InventorySystemView2.fxml"));
stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@FXML
void swicthToRemove(ActionEvent event) {
}
@Override
public void initialize(URL location, ResourceBundle resources) {
idColumn.setCellValueFactory(new PropertyValueFactory<>("Id"));
nameColumn.setCellValueFactory(new PropertyValueFactory<>("Name"));
costColumn.setCellValueFactory(new PropertyValueFactory<>("Cost"));
saleColumn.setCellValueFactory(new PropertyValueFactory<>("SalePrice"));
amountColumn.setCellValueFactory(new PropertyValueFactory<>("Amount"));
totalCostColumn.setCellValueFactory(new PropertyValueFactory<>("TotalCost"));
totalSalePriceColumn.setCellValueFactory(new PropertyValueFactory<>("TotalSalePrice"));
table.setItems(list);
}
ObservableList<Item> list=FXCollections.observableArrayList(
new Item(1,"i",3,4,5,6,2)
);
}
and finnaly here is the error output
Nov. 28, 2022 7:36:22 P.M. javafx.scene.control.cell.PropertyValueFactory getCellDataReflectively
WARNING: Can not retrieve property 'Id' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@72a907f5 with provided class type: class application.Item
java.lang.RuntimeException: java.lang.IllegalAccessException: module javafx.base cannot access class application.Item (in module ProjectReviewerCollection) because module ProjectReviewerCollection does not open application to javafx.base
at javafx.base/com.sun.javafx.property.PropertyReference.get(PropertyReference.java:176)
at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.getCellDataReflectively(PropertyValueFactory.java:184)
at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.call(PropertyValueFactory.java:154)
at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.call(PropertyValueFactory.java:133)
at javafx.controls/javafx.scene.control.TableColumn.getCellObservableValue(TableColumn.java:593)
at javafx.controls/javafx.scene.control.TableColumn.getCellObservableValue(TableColumn.java:578)
at javafx.controls/javafx.scene.control.TableCell.updateItem(TableCell.java:646)
at javafx.controls/javafx.scene.control.TableCell.indexChanged(TableCell.java:469)
at javafx.controls/javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:120)
at javafx.controls/javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:539)
at javafx.controls/javafx.scene.control.skin.TableRowSkinBase.<init>(TableRowSkinBase.java:159)
at javafx.controls/javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:89)
at javafx.controls/javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:213)
at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:897)
at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:89)
at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:67)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145)
at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9547)
at javafx.graphics/javafx.scene.Node.applyCss(Node.java:9634)
at javafx.controls/javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1743)
at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1720)
at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1846)
at javafx.controls/javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2758)
at javafx.controls/javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1239)
at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1207)
at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1214)
at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1214)
at javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:576)
at javafx.graphics/javafx.scene.Scene.preferredSize(Scene.java:1750)
at javafx.graphics/javafx.scene.Scene$2.preferredSize(Scene.java:393)
at javafx.graphics/com.sun.javafx.scene.SceneHelper.preferredSize(SceneHelper.java:66)
at javafx.graphics/javafx.stage.Window$12.invalidated(Window.java:1111)
at javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
at javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145)
at javafx.graphics/javafx.stage.Window.setShowing(Window.java:1187)
at javafx.graphics/javafx.stage.Window.show(Window.java:1202)
at javafx.graphics/javafx.stage.Stage.show(Stage.java:273)
at ProjectReviewerCollection/application.Main.start(Main.java:24)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalAccessException: module javafx.base cannot access class application.Item (in module ProjectReviewerCollection) because module ProjectReviewerCollection does not open application to javafx.base
at javafx.base/com.sun.javafx.property.MethodHelper.invoke(MethodHelper.java:69)
at javafx.base/com.sun.javafx.property.PropertyReference.get(PropertyReference.java:174)
... 46 more
I cant fit all of it here but the error code happens for all other varibales not only ID and it happens to name,etc
I had decalred the type of the table and columns to be of the Item class whihc is the class I created, I also made sure when doing the propertyvalueFactory to use the names that would help them locate the getter methods as well.