JAVA FXCollections LoadException Class 不是有效类型
JAVA FXCollections LoadException Class is not a valid type
我正在尝试借助这个 Tutorial.
实现一个包含一些数据的 TableView
我无法将数据从 "Person.java" 填充到 TableView。
我将问题追踪到最底部 "fxmltableview.fxml" 文件中的 <Person firstName="Jacob" lastName="Smith" email="jacob.smith@example.com" />
部分。
因此,似乎出于某种原因,我的 "observableArrayList" 并非全部包含 "Person.java" 对象。 "String.java" 是允许的。
我没有尝试这些文件的想法,因为我通过教程逐字阅读了好几次,我没有发现我的文件之间有任何区别。每当我删除 <Person someStuff/>
它工作正常。
我怎样才能摆脱这个烦人的错误?
原因:javafx.fxml.LoadException:Person 不是有效类型。
/D:/workspace/TableViewExampleFXML/bin/application/fxmltableview.fxml:40
FXML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import fxmltableview.*?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.collections.FXCollections?>
<GridPane alignment="CENTER" hgap="10.0" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
prefHeight="400.0" prefWidth="600.0" vgap="10.0" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.FXMLTableViewController">
<TableView fx:id="tableView" prefHeight="200.0" prefWidth="200.0"
GridPane.columnIndex="0" GridPane.rowIndex="1">
<columns>
<TableColumn prefWidth="75.0" text="First Name">
<cellValueFactory>
<PropertyValueFactory property="firstName" />
</cellValueFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="Last Name">
<cellValueFactory>
<PropertyValueFactory property="lastName" />
</cellValueFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="Email Address">
<cellValueFactory>
<PropertyValueFactory property="email" />
</cellValueFactory>
</TableColumn>
</columns>
<items>
<FXCollections fx:factory="observableArrayList">
<Person firstName="Jacob" lastName="Smith" email="jacob.smith@example.com" />
</FXCollections>
</items>
</TableView>
</GridPane>
教程中的 "Person.java" 是 copy/pasted,这就是为什么我很沮丧它对我不起作用的原因。不管怎样,我会把它贴在这里。
package application;
import javafx.beans.property.SimpleStringProperty;
public class Person {
private final SimpleStringProperty firstName = new SimpleStringProperty("");
private final SimpleStringProperty lastName = new SimpleStringProperty("");
private final SimpleStringProperty email = new SimpleStringProperty("");
public Person() {
this("", "", "");
}
public Person(String firstName, String lastName, String email) {
setFirstName(firstName);
setLastName(lastName);
setEmail(email);
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String fName) {
firstName.set(fName);
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String fName) {
lastName.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(String fName) {
email.set(fName);
}
}
您更改了 Person
class 的软件包名称。在本教程中,包名称为 fxmltableview
,其中您有 application
。您没有相应地更改导入。所以你需要
<?import application.Person ?>
而不是
<?import fxmltableview.* ?>
我正在尝试借助这个 Tutorial.
实现一个包含一些数据的 TableView我无法将数据从 "Person.java" 填充到 TableView。
我将问题追踪到最底部 "fxmltableview.fxml" 文件中的 <Person firstName="Jacob" lastName="Smith" email="jacob.smith@example.com" />
部分。
因此,似乎出于某种原因,我的 "observableArrayList" 并非全部包含 "Person.java" 对象。 "String.java" 是允许的。
我没有尝试这些文件的想法,因为我通过教程逐字阅读了好几次,我没有发现我的文件之间有任何区别。每当我删除 <Person someStuff/>
它工作正常。
我怎样才能摆脱这个烦人的错误?
原因:javafx.fxml.LoadException:Person 不是有效类型。 /D:/workspace/TableViewExampleFXML/bin/application/fxmltableview.fxml:40
FXML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import fxmltableview.*?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.collections.FXCollections?>
<GridPane alignment="CENTER" hgap="10.0" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
prefHeight="400.0" prefWidth="600.0" vgap="10.0" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.FXMLTableViewController">
<TableView fx:id="tableView" prefHeight="200.0" prefWidth="200.0"
GridPane.columnIndex="0" GridPane.rowIndex="1">
<columns>
<TableColumn prefWidth="75.0" text="First Name">
<cellValueFactory>
<PropertyValueFactory property="firstName" />
</cellValueFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="Last Name">
<cellValueFactory>
<PropertyValueFactory property="lastName" />
</cellValueFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="Email Address">
<cellValueFactory>
<PropertyValueFactory property="email" />
</cellValueFactory>
</TableColumn>
</columns>
<items>
<FXCollections fx:factory="observableArrayList">
<Person firstName="Jacob" lastName="Smith" email="jacob.smith@example.com" />
</FXCollections>
</items>
</TableView>
</GridPane>
教程中的 "Person.java" 是 copy/pasted,这就是为什么我很沮丧它对我不起作用的原因。不管怎样,我会把它贴在这里。
package application;
import javafx.beans.property.SimpleStringProperty;
public class Person {
private final SimpleStringProperty firstName = new SimpleStringProperty("");
private final SimpleStringProperty lastName = new SimpleStringProperty("");
private final SimpleStringProperty email = new SimpleStringProperty("");
public Person() {
this("", "", "");
}
public Person(String firstName, String lastName, String email) {
setFirstName(firstName);
setLastName(lastName);
setEmail(email);
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String fName) {
firstName.set(fName);
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String fName) {
lastName.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(String fName) {
email.set(fName);
}
}
您更改了 Person
class 的软件包名称。在本教程中,包名称为 fxmltableview
,其中您有 application
。您没有相应地更改导入。所以你需要
<?import application.Person ?>
而不是
<?import fxmltableview.* ?>