将自定义 类 添加到 fxml 文件
Adding custom classes to fxml files
如何将自定义 class 添加到 fxml 文件。
我试过添加这个:
package gameName.FinishedClasses;
import javafx.scene.control.Button;
public class CardButton extends Button
{
int cardID;
public CardButton(String n , int m)
{
setText(n);
cardID = m;
}
public CardButton(int m)
{
cardID = m;
}
public int getCardID()
{
return cardID;
}
public void setCardID(int n)
{
cardID =n;
}
public void setButtonText(String n)
{
setText(n);
}
}
像这样:
<CardButton mnemonicParsing="false" text="Button" fx:id="Button1R1C" cardID="0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<HBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</HBox.margin>
</CardButton>
堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: gameName.FinishedClasses$CardButton
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916)
at javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905)
at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846)
它说它无法实例化,我似乎无法弄清楚问题是什么。
FXMLLoader
希望您的 class 和包名称跟在 standard naming conventions 之后。具体来说,由于 FinishedClasses
是大写的,因此 FXML 导入
<?import gameName.FinishedClasses.CardButton ?>
被解释为 CardButton
被称为 FinishedClasses
的 class 中的内部 class。正确重命名您的包(即全部小写),它应该可以正常工作。
如何将自定义 class 添加到 fxml 文件。
我试过添加这个:
package gameName.FinishedClasses;
import javafx.scene.control.Button;
public class CardButton extends Button
{
int cardID;
public CardButton(String n , int m)
{
setText(n);
cardID = m;
}
public CardButton(int m)
{
cardID = m;
}
public int getCardID()
{
return cardID;
}
public void setCardID(int n)
{
cardID =n;
}
public void setButtonText(String n)
{
setText(n);
}
}
像这样:
<CardButton mnemonicParsing="false" text="Button" fx:id="Button1R1C" cardID="0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<HBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</HBox.margin>
</CardButton>
堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: gameName.FinishedClasses$CardButton
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916)
at javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905)
at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846)
它说它无法实例化,我似乎无法弄清楚问题是什么。
FXMLLoader
希望您的 class 和包名称跟在 standard naming conventions 之后。具体来说,由于 FinishedClasses
是大写的,因此 FXML 导入
<?import gameName.FinishedClasses.CardButton ?>
被解释为 CardButton
被称为 FinishedClasses
的 class 中的内部 class。正确重命名您的包(即全部小写),它应该可以正常工作。