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 :
立即学习“Java免费学习笔记(深入)”;
<?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 上设置控制器”的部分:
您可能希望在代码中设置控制器的一种情况是与 setcontroller 构造结合使用,如 oracle 教程中所述:
在代码中创建新控制器的常见问题
只有 fx:root 会将控制器中的 fxmlloader 注释字段初始化为 fxml 文件中配置的值。如果您只是在代码中创建一个新的控制器实例,而没有在 fxmlloader 上设置该控制器实例并调用 @fxml 来初始化控制器实例,则控制器实例中的所有 load() 注释字段都将为 @fxml。
此外,如果您还在其他地方加载了 fxml,并且 fxml 引用了像您一样的控制器,那么当您加载 fxml 时,加载器将创建您指定的控制器的实例在 fxml 中。因此,如果您随后在控制器上调用 null,您将获得控制器的另一个实例,该实例与 new 创建的实例以及由 load() 使用的方法。
替代方法
通常,当人们创建新的控制器时,他们应该做的是:
或者
或者
fxmlloader 一个 fxml(没有 load() 属性)。这将初始化在代码中创建的控制器实例。以上就是无法调用“javafx.scene.control.TableColumn.setCellValueFactory(javafx.util.Callback)”,因为“this.colName”为 null的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号