JavaFX TableView:无法读取不可读的属性

时间:2017-10-22 19:12:45

标签: java database javafx tableview

我正在尝试使用数据库中的数据填充JavaFX TableView,并且我收到此错误,我无法解决,或者找到一个asnwer在线。

我有几个项目在JDK 8上工作,我从来没有在执行类似任务时遇到此错误,但我最近使用JDK 9的项目给了我这个错误,不知道问题出在哪里。两个项目的代码完全相同。

此外,我想指出,此代码成功地从数据库中检索数据,但在表格中显示时会出现错误。

CODE

FXML:

<TableView fx:id="table" layoutX="46.0" layoutY="83.0" prefHeight="458.0" prefWidth="680.0">
               <columns>
                  <TableColumn fx:id="column_code" prefWidth="100" text="Item Code" />
                  <TableColumn fx:id="column_name" prefWidth="200" text="Item Name" />
                  <TableColumn fx:id="column_date" prefWidth="100" text="Order Date" />
                  <TableColumn fx:id="column_quantity" prefWidth="80" text="Quantity" />
                  <TableColumn fx:id="column_cost" prefWidth="100" text="Order Cost" />
                  <TableColumn fx:id="column_status" prefWidth="100" text="Order Status" />
               </columns>
            </TableView>

控制器:

public class StockController implements Initializable {

    static Connection con = null;
    static PreparedStatement pst = null;
    static Statement stmt = null;
    static ResultSet rs;
    private ObservableList<Stock> data


    @FXML private TableView<Stock> table;
    @FXML private TableColumn<?, ?> column_code;
    @FXML private TableColumn<?, ?> column_name;
    @FXML private TableColumn<?, ?> column_date;
    @FXML private TableColumn<?, ?> column_quantity;
    @FXML private TableColumn<?, ?> column_cost;
    @FXML private TableColumn<?, ?> column_status;

    @Override
    public void initialize(URL url, ResourceBundle rb){

        con = sample.Database.DBConnection.makeConnection();
        data = FXCollections.observableArrayList();

        try{
            stmt = con.createStatement();
        } catch (Exception e){
            System.out.println("error connecting to db");
        }

        setCellTable();
        loadDataFromDB();
    }

    public void setCellTable(){
        column_code.setCellValueFactory(new PropertyValueFactory<>("itemCode"));
        column_name.setCellValueFactory(new PropertyValueFactory<>("itemName"));
        column_date.setCellValueFactory(new PropertyValueFactory<>("orderDate"));
        column_quantity.setCellValueFactory(new PropertyValueFactory<>("orderQuantity"));
        column_cost.setCellValueFactory(new PropertyValueFactory<>("orderCost"));
        column_status.setCellValueFactory(new PropertyValueFactory<>("orderStatus"));
    }

    public void loadDataFromDB(){
        try {
            String q1 = "SELECT * FROM products";

            String query = "SELECT products.itemCode, products.itemName, stock.orderDate, stock.orderedQuantity, products.itemCost, stock.orderStatus " +
                    "FROM products, stock";

            pst = con.prepareStatement(query);
            rs = pst.executeQuery();

            while (rs.next()){
                data.add(new Stock(rs.getString(1), rs.getString(2), rs.getString(3),
                        rs.getString(4), rs.getString(5), rs.getString(6)));

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        table.setItems(data);
    }

}

股票类:

public class Stock {

    private String itemCode;
    private String itemName;
    private String orderDate;
    private String orderQuantity;
    private String orderCost;
    private String orderStatus;

    public Stock(String itemCode, String itemName, String orderDate, String orderQuantity, String orderCost, String orderStatus) {
        this.itemCode = itemCode;
        this.itemName = itemName;
        this.orderDate = orderDate;
        this.orderQuantity = orderQuantity;
        this.orderCost = orderCost;
        this.orderStatus = orderStatus;
    }

    public String getitemCode() {
        return itemCode;
    }

    public void setitemCode(String itemCode) {
        this.itemCode = itemCode;
    }

    public String getitemName() {
        return itemName;
    }

    public void setitemName(String itemName) {
        this.itemName = itemName;
    }

    public String getorderDate() {
        return orderDate;
    }

    public void setorderDate(String orderDate) {
        this.orderDate = orderDate;
    }

    public String getorderQuantity() {
        return orderQuantity;
    }

    public void setorderQuantity(String orderQuantity) {
        this.orderQuantity = orderQuantity;
    }

    public String getorderCost() {
        return orderCost;
    }

    public void setorderCost(String orderCost) {
        this.orderCost = orderCost;
    }

    public String getorderStatus() {
        return orderStatus;
    }

    public void setorderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
    }

}

错误:(我收到所有属性的消息,所以我只是在这里复制了一个)

Oct 22, 2017 8:03:00 PM javafx.scene.control.cell.PropertyValueFactory getCellDataReflectively
WARNING: Can not retrieve property 'itemCode' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@fe29770 with provided class type: class sample.Stock.Stock
java.lang.IllegalStateException: Cannot read from unreadable property itemCode
    at javafx.base/com.sun.javafx.property.PropertyReference.get(PropertyReference.java:170)
    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.access$000(Control.java:83)
    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:147)
    at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9513)
    at javafx.graphics/javafx.scene.Node.applyCss(Node.java:9600)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1715)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1692)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1801)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2638)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1245)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1226)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:590)
    at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2507)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:410)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:409)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:436)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319)
    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:175)
    at java.base/java.lang.Thread.run(Thread.java:844)

0 个答案:

没有答案