php小编新一在使用JavaFX时遇到了一个问题,即在调用"javafx.scene.control.TableColumn.setCellValueFactory(javafx.util.Callback)"时出现了"this.colName为null"的错误。这个错误的原因是因为colName为空,导致无法调用该方法。为了解决这个问题,我们需要检查colName是否正确初始化,并且确保其不为空。只有在colName正确初始化之后,才能成功调用"javafx.scene.control.TableColumn.setCellValueFactory(javafx.util.Callback)"方法。希望以上解答对您有帮助!
所以我的问题是我无法将数据显示到表视图,我不明白为什么 我有一个表单使用 productcontroller 和显示 tableview 方法,在另一个控制器 cardproductcontrller 中,我在 addfcn 方法中调用 productcontroller 中的方法,它返回错误:
无法调用 javafx.scene.control.tablecolumn.setcellvaluefactory(javafx.util.callback)
,因为 this.colname
为 null
这里有更多详细错误:
java.lang.nullpointerexception: cannot invoke "javafx.scene.control.tablecolumn.setcellvaluefactory(javafx.util.callback)" because "this.colname" is null at application.productcontroller.showorderdetail(productcontroller.java:409) at application.cardprodcontroller.addfcn(cardprodcontroller.java:169) at java.base/jdk.internal.reflect.directmethodhandleaccessor.invoke(directmethodhandleaccessor.java:103) at java.base/java.lang.reflect.method.invoke(method.java:580) at com.sun.javafx.reflect.trampoline.invoke(methodutil.java:72) at java.base/jdk.internal.reflect.directmethodhandleaccessor.invoke(directmethodhandleaccessor.java:103) at java.base/java.lang.reflect.method.invoke(method.java:580) at javafx.base@21/com.sun.javafx.reflect.methodutil.invoke(methodutil.java:270) at javafx.fxml@21/com.sun.javafx.fxml.methodhelper.invoke(methodhelper.java:84) at javafx.fxml@21/javafx.fxml.fxmlloader$methodhandler.invoke(fxmlloader.java:1855) at javafx.fxml@21/javafx.fxml.fxmlloader$controllermethodeventhandler.handle(fxmlloader.java:1726) at javafx.base@21/com.sun.javafx.event.compositeeventhandler.dispatchbubblingevent(compositeeventhandler.java:86) at javafx.base@21/com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:232) at javafx.base@21/com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:189) at javafx.base@21/com.sun.javafx.event.compositeeventdispatcher.dispatchbubblingevent(compositeeventdispatcher.java:59) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:58) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.eventutil.fireeventimpl(eventutil.java:74) at javafx.base@21/com.sun.javafx.event.eventutil.fireevent(eventutil.java:49) at javafx.base@21/javafx.event.event.fireevent(event.java:198) at javafx.graphics@21/javafx.scene.node.fireevent(node.java:8875) at javafx.controls@21/javafx.scene.control.button.fire(button.java:203) at javafx.controls@21/com.sun.javafx.scene.control.behavior.buttonbehavior.mousereleased(buttonbehavior.java:207) at javafx.controls@21/com.sun.javafx.scene.control.inputmap.inputmap.handle(inputmap.java:274) at javafx.base@21/com.sun.javafx.event.compositeeventhandler$normaleventhandlerrecord.handlebubblingevent(compositeeventhandler.java:247) at javafx.base@21/com.sun.javafx.event.compositeeventhandler.dispatchbubblingevent(compositeeventhandler.java:80) at javafx.base@21/com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:232) at javafx.base@21/com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:189) at javafx.base@21/com.sun.javafx.event.compositeeventdispatcher.dispatchbubblingevent(compositeeventdispatcher.java:59) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:58) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) at javafx.base@21/com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) at javafx.base@21/com.sun.javafx.event.eventutil.fireeventimpl(eventutil.java:74) at javafx.base@21/com.sun.javafx.event.eventutil.fireevent(eventutil.java:54) at javafx.base@21/javafx.event.event.fireevent(event.java:198) at javafx.graphics@21/javafx.scene.scene$mousehandler.process(scene.java:3984) at javafx.graphics@21/javafx.scene.scene.processmouseevent(scene.java:1890) at javafx.graphics@21/javafx.scene.scene$scenepeerlistener.mouseevent(scene.java:2708) at javafx.graphics@21/com.sun.javafx.tk.quantum.glassvieweventhandler$mouseeventnotification.run(glassvieweventhandler.java:411) at javafx.graphics@21/com.sun.javafx.tk.quantum.glassvieweventhandler$mouseeventnotification.run(glassvieweventhandler.java:301) at java.base/java.security.accesscontroller.doprivileged(accesscontroller.java:400) at javafx.graphics@21/com.sun.javafx.tk.quantum.glassvieweventhandler.lambda$handlemouseevent$2(glassvieweventhandler.java:450) at javafx.graphics@21/com.sun.javafx.tk.quantum.quantumtoolkit.runwithoutrenderlock(quantumtoolkit.java:424) at javafx.graphics@21/com.sun.javafx.tk.quantum.glassvieweventhandler.handlemouseevent(glassvieweventhandler.java:449) at javafx.graphics@21/com.sun.glass.ui.view.handlemouseevent(view.java:551) at javafx.graphics@21/com.sun.glass.ui.view.notifymouse(view.java:937) at javafx.graphics@21/com.sun.glass.ui.win.winapplication._runloop(native method) at javafx.graphics@21/com.sun.glass.ui.win.winapplication.lambda$runloop$3(winapplication.java:185) at java.base/java.lang.thread.run(thread.java:1583)
这里是代码: 卡产品控制器:
package application; import java.net.url; import java.sql.connection; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.date; import java.util.optional; import java.util.resourcebundle; import javafx.fxml.fxml; import javafx.fxml.initializable; import javafx.scene.control.alert; import javafx.scene.control.alert.alerttype; import javafx.scene.control.button; import javafx.scene.control.buttontype; import javafx.scene.control.label; import javafx.scene.control.spinner; import javafx.scene.control.spinnervaluefactory; import javafx.scene.image.image; import javafx.scene.image.imageview; import javafx.scene.layout.borderpane; public class cardprodcontroller implements initializable { @fxml private button addbtn; @fxml private borderpane cardform; @fxml private imageview imageview; @fxml private label name; @fxml private label price; @fxml private spinner<integer> quantity; private productmodel productm; private image image; private string proid; private string pro_image; private string pro_date; private spinnervaluefactory<integer> spin; @fxml private connection connection; private preparedstatement prepare; private resultset result; private alert alert; private double pr; private int cusid; public void setdata(productmodel productm) { this.productm = productm; pro_image = productm.getproductimage(); pro_date = string.valueof(productm.getdate()); proid = productm.getproductid(); name.settext(productm.getproductname()); price.settext(string.valueof(productm.getproductprice())); string path = "file:" + productm.getproductimage(); image = new image(path, 190, 130, false, true); imageview.setimage(image); pr = productm.getproductprice(); } private int qty; private double totalp; private string orddid; public void addfcn() throws sqlexception { productcontroller pc = new productcontroller(); pc.customerid(); pc.order_detailid(); qty = quantity.getvalue(); string check = ""; string checkavailable = "select pro_status from product where pro_id = '" + proid + "'"; connection = database.connect(); try { int checks = 0; string checkstock = "select pro_quantity from product where pro_id = '" + proid + "'"; prepare = connection.preparestatement(checkstock); result = prepare.executequery(); if(result.next()) { checks = result.getint("pro_quantity"); } if(checks == 0){ string updatestock = "update product set pro_status = 'unavailable' where pro_id = '"+proid+"'"; //update to database to mark it as unavailable prepare = connection.preparestatement(updatestock); prepare.executeupdate(); } prepare = connection.preparestatement(checkavailable); result = prepare.executequery(); if (result.next()) { check = result.getstring("pro_status"); } if (!check.equals("available") || qty == 0) { alert = new alert(alerttype.error); alert.settitle("error message"); alert.setheadertext(null); alert.setcontenttext("product currently unavalible or we run out"); alert.showandwait(); } else { if (checks < qty) { alert = new alert(alerttype.error); alert.settitle("error message"); alert.setheadertext(null); alert.setcontenttext("invalid. this product is out of stock"); alert.showandwait(); } else { pro_image = pro_image.replace("\\", "\\\\"); string insertdata = "insert into order_detail " + "(cus_id, ord_id, pro_id ,pro_name, pro_price, pro_quantity, orderdate) " + "values(?,?,?,?,?,?,?)"; prepare = connection.preparestatement(insertdata); prepare.setstring(1, string.valueof(data.cusid)); orddid = data.orddid; prepare.setstring(2, orddid); prepare.setstring(3, proid); prepare.setstring(4, name.gettext()); totalp = (qty * pr); prepare.setstring(5, string.valueof(totalp)); prepare.setstring(6, string.valueof(qty)); date date = new date(); java.sql.date sqldate = new java.sql.date(date.gettime()); prepare.setstring(7, string.valueof(sqldate)); prepare.executeupdate(); int upstock = checks - qty; string updatestock = "update product set pro_quantity = " + upstock + " where pro_id = '"+proid+"'"; //update product to mark it's quantity as decreased as being order by customer prepare = connection.preparestatement(updatestock); prepare.executeupdate(); alert = new alert(alerttype.information); alert.settitle("information message"); alert.setheadertext(null); alert.setcontenttext("successfully added!"); optional<buttontype> option = alert.showandwait(); if(option.get().equals(buttontype.ok)) { pc.showorderdetail(); } //pc.menugettotal();//tinh sau } } } catch (exception e) { e.printstacktrace(); } } public void setquantity() { spin = new spinnervaluefactory.integerspinnervaluefactory(1, 100, 0); quantity.setvaluefactory(spin); } @override public void initialize(url arg0, resourcebundle arg1) { setquantity(); } }
产品控制器:
package application; import java.io.ioexception; import java.net.url; import java.sql.connection; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.optional; import java.util.resourcebundle; import com.mysql.cj.x.protobuf.mysqlxcrud.column; 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.geometry.insets; import javafx.scene.node; import javafx.scene.parent; import javafx.scene.scene; import javafx.scene.control.alert; import javafx.scene.control.alert.alerttype; import javafx.scene.control.button; import javafx.scene.control.buttontype; import javafx.scene.control.label; import javafx.scene.control.tablecolumn; import javafx.scene.control.tableview; import javafx.scene.control.cell.propertyvaluefactory; import javafx.scene.layout.anchorpane; import javafx.scene.layout.gridpane; import javafx.scene.layout.pane; import javafx.stage.stage; public class productcontroller implements initializable{ @fxml private gridpane gridprod; @fxml private button clbtn; @fxml private button donebtn; @fxml private button clrbtn; @fxml private tablecolumn<order_detailmodel, string> colname; @fxml private tablecolumn<order_detailmodel, string> colprice; @fxml private tablecolumn<order_detailmodel, string> colquantity; @fxml private tableview<order_detailmodel> orderview; @fxml private button paybtn; @fxml private button printbillbtn; @fxml private label totalbill; @fxml private connection connection; private preparedstatement prepare; private resultset result; private alert alert; @fxml private stage sidestage; private scene scene; private parent root; private int cid; public void customerid() throws sqlexception { string sql = "select max(cus_id) from customer"; connection = database.connect(); try { prepare = connection.preparestatement(sql); result = prepare.executequery(); if (result.next()) { cid = result.getint("max(cus_id)"); } string checkcid = "select max(cus_id) from receipt"; prepare = connection.preparestatement(checkcid); result = prepare.executequery(); int checkid = 0; if (result.next()) { checkid = result.getint("max(cus_id)"); } if (cid == 0) { cid += 1; } else if (cid == checkid) { cid += 1; } data.cusid = cid; } catch (exception e) { e.printstacktrace(); } } private string odid; public void order_detailid() throws sqlexception { string sql = "select max(ord_id) from order_detail"; connection = database.connect(); try { prepare = connection.preparestatement(sql); result = prepare.executequery(); if (result.next()) { odid = result.getstring("max(ord_id)"); } string checkodid = "select max(ord_id) from receipt "; prepare = connection.preparestatement(checkodid); result = prepare.executequery(); string checkid = null; if (result.next()) { checkid = result.getstring("max(ord_id)"); } if (odid == null) { string aim = "ord-" + 0; odid = aim + 1; } else if (odid == checkid) { string aim = "ord-" + 0; odid = aim + 1; } data.orddid = odid; system.out.println(data.orddid); } catch (exception e) { e.printstacktrace(); } } private observablelist<productmodel> carddatalist = fxcollections.observablearraylist(); public observablelist<productmodel> getdata(){ observablelist<productmodel> listdata = fxcollections.observablearraylist(); string getdata = "select * from product"; try { connection = database.connect(); } catch (sqlexception e) { // todo auto-generated catch block e.printstacktrace(); } try { prepare = connection.preparestatement(getdata); result = prepare.executequery(); productmodel productm; while(result.next()) { productm = new productmodel(result.getint("id") ,result.getstring("pro_id") , result.getstring("pro_name") , result.getdouble("pro_price") , result.getint("pro_quantity") , result.getstring("pro_image")); listdata.add(productm); } }catch (sqlexception e) { // todo: handle exception e.printstacktrace(); } return listdata; } public void menuprod() { carddatalist.clear(); carddatalist.addall(getdata()); int row = 0; int column = 0; gridprod.getchildren().clear(); gridprod.getrowconstraints().clear(); gridprod.getcolumnconstraints().clear(); for(int i = 0; i < carddatalist.size(); i++) { try { fxmlloader loader = new fxmlloader(); loader.setlocation(getclass().getresource("cardproduct.fxml")); pane pane = loader.load(); cardprodcontroller cpc = loader.getcontroller(); cpc.setdata(carddatalist.get(i)); if(column == 3) { column = 0; row += 1; } gridprod.add(pane, column++, row); gridpane.setmargin(pane, new insets(10)); }catch (ioexception e) { // todo: handle exception e.printstacktrace(); } } } public void clfcn(actionevent event) throws ioexception { root = fxmlloader.load(getclass().getresource("staffsection.fxml")); sidestage = (stage)((node)event.getsource()).getscene().getwindow(); scene = new scene(root); sidestage.setscene(scene); sidestage.setresizable(false); sidestage.show(); } public void donefcn(actionevent event) throws ioexception { root = fxmlloader.load(getclass().getresource("staffsection.fxml")); sidestage = (stage)((node)event.getsource()).getscene().getwindow(); scene = new scene(root); sidestage.setscene(scene); sidestage.setresizable(false); sidestage.show(); } public observablelist<order_detailmodel> orderdlist() throws sqlexception { observablelist<order_detailmodel> olist = fxcollections.observablearraylist(); string getdata = "select pro_name, pro_price, pro_quantity from order_detail"; connection = database.connect(); try { prepare = connection.preparestatement(getdata); result = prepare.executequery(); order_detailmodel orddm; while(result.next()) { orddm = new order_detailmodel(result.getstring("pro_name") ,result.getdouble("pro_price") ,result.getint("pro_quantity")); olist.add(orddm); } }catch (exception e) { e.printstacktrace(); system.out.println(e.getmessage()); } return olist; } observablelist<order_detailmodel> listordd; public void showorderdetail() { try { listordd = orderdlist(); colname.setcellvaluefactory(new propertyvaluefactory<>("pro_name")); colprice.setcellvaluefactory(new propertyvaluefactory<>("pro_price")); colquantity.setcellvaluefactory(new propertyvaluefactory<>("pro_quantity")); orderview.setitems(listordd); }catch (exception e) { e.printstacktrace(); e.getmessage(); } } @override public void initialize(url arg0, resourcebundle arg1) { getdata(); menuprod(); } }
fxml 文件使用 productcontroller :
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.Pane?> <?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.text.Font?> <BorderPane prefHeight="700.0" prefWidth="1200.0" stylesheets="@CSS/TableServe.css" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ProductController"> <center> <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"> <children> <AnchorPane fx:id="acPane1" layoutX="15.0" layoutY="15.0" prefHeight="670.0" prefWidth="750.0"> <children> <ScrollPane layoutX="15.0" layoutY="15.0" prefHeight="640.0" prefWidth="720.0"> <content> <GridPane fx:id="gridProd" hgap="10.0" prefHeight="879.0" prefWidth="680.0" vgap="10.0"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> </columnConstraints> <rowConstraints> <RowConstraints fillHeight="false" minHeight="10.0" prefHeight="100.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="100.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="100.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="100.0" vgrow="SOMETIMES" /> </rowConstraints> </GridPane> </content> <padding> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </padding> </ScrollPane> </children> </AnchorPane> <AnchorPane fx:id="acPane2" layoutX="785.0" layoutY="15.0" prefHeight="670.0" prefWidth="400.0"> <children> <Pane prefHeight="670.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <TableView fx:id="orderView" layoutX="15.0" layoutY="14.0" prefHeight="456.0" prefWidth="370.0"> <columns> <TableColumn fx:id="colName" prefWidth="166.4000244140625" text="Name" /> <TableColumn fx:id="colPrice" prefWidth="108.800048828125" text="Price" /> <TableColumn fx:id="colQuantity" prefWidth="93.5999755859375" text="Quantity'" /> </columns> </TableView> <Button fx:id="payBtn" layoutX="10.0" layoutY="566.0" mnemonicParsing="false" prefWidth="120.0" text="Pay" /> <Button fx:id="printBillBtn" layoutX="270.0" layoutY="566.0" mnemonicParsing="false" prefWidth="120.0" text="Print BIll" /> <Button fx:id="clrBtn" layoutX="140.0" layoutY="566.0" mnemonicParsing="false" prefWidth="120.0" text="Clear" /> <Button fx:id="clBtn" layoutX="225.0" layoutY="629.0" mnemonicParsing="false" onAction="#clFcn" prefHeight="30.0" prefWidth="160.0" text="Cancel" /> <Button fx:id="doneBtn" layoutX="17.0" layoutY="629.0" mnemonicParsing="false" onAction="#doneFcn" prefHeight="30.0" prefWidth="160.0" text="Done" /> <Label fx:id="totalBill" layoutX="17.0" layoutY="489.0" prefHeight="30.0" prefWidth="173.0" text="Total: 00$$"> <font> <Font size="20.0" /> </font> </Label> </children> </Pane> </children> </AnchorPane> </children> </AnchorPane> </center> </BorderPane>
我几乎做了所有事情,使用chatgpt得到了ofc的帮助,但仍然不知道为什么,我认为我的sql是错误的?
在 fxml 中指定控制器时,不要在代码中创建控制器
切勿在由 fxml 文件中的 fx:controller
属性指定的控制器上调用 new
。
此代码错误:
ProductController pC = new ProductController();
有关更多信息,另请参阅:
当您可以在代码中创建新控制器
在控制器上调用 new
的唯一有效情况是如果这两个条件都为 true:
setcontroller
在加载 fxml 之前在 fxmlloader 上。并且
但是,您并没有做任何这些事情。
来自 setcontroller
的文档:
有关在代码中设置控制器的示例,请参阅此答案中标题为“在 fxmlloader 上设置控制器”的部分:
您可能希望在代码中设置控制器的一种情况是与 fx:root
构造结合使用,如 oracle 教程中所述:
在代码中创建新控制器的常见问题
只有 fxmlloader
会将控制器中的 @fxml
注释字段初始化为 fxml 文件中配置的值。如果您只是在代码中创建一个新的控制器实例,而没有在 fxmlloader 上设置该控制器实例并调用 load()
来初始化控制器实例,则控制器实例中的所有 @fxml
注释字段都将为 null
。
此外,如果您还在其他地方加载了 fxml,并且 fxml 引用了像您一样的控制器,那么当您加载 fxml 时,加载器将创建您指定的控制器的实例在 fxml 中。因此,如果您随后在控制器上调用 new
,您将获得控制器的另一个实例,该实例与 fxmlloader
创建的实例以及由 load()
使用的方法。
替代方法
通常,当人们创建新的控制器时,他们应该做的是:
或者
或者
load()
一个 fxml(没有 fx:controller
属性)。这将初始化在代码中创建的控制器实例。The above is the detailed content of Cannot call 'javafx.scene.control.TableColumn.setCellValueFactory(javafx.util.Callback)' because 'this.colName' is null. For more information, please follow other related articles on the PHP Chinese website!