Java 如何使用FXML控制器从数据库检索数据并填充TableView(在FXML中定义)?
我不熟悉JavaFX和FXML,所以如果这是一个非常简单的问题,请原谅我。 例如,我想从数据库MySQL中检索数据,并将其放在FXML文件中定义的TableView中。我还想使这个TableView可编辑,并在用户进行一些更改时更新数据库 我读过 我已经找到了,但它不是很清楚,因为没有代码示例 我理解使用DataFX是可能的。我不想那样做 我理解可以使用控制器检索数据并填充表。我不知道最后一步该怎么做。有人有代码示例吗 假设我有一个数据库表people,其中包含名字和姓氏 我的FXML代码如下所示:Java 如何使用FXML控制器从数据库检索数据并填充TableView(在FXML中定义)?,java,database,javafx-8,fxml,Java,Database,Javafx 8,Fxml,我不熟悉JavaFX和FXML,所以如果这是一个非常简单的问题,请原谅我。 例如,我想从数据库MySQL中检索数据,并将其放在FXML文件中定义的TableView中。我还想使这个TableView可编辑,并在用户进行一些更改时更新数据库 我读过 我已经找到了,但它不是很清楚,因为没有代码示例 我理解使用DataFX是可能的。我不想那样做 我理解可以使用控制器检索数据并填充表。我不知道最后一步该怎么做。有人有代码示例吗 假设我有一个数据库表people,其中包含名字和姓氏 我的FXML代码如下所
<GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<Label style="-fx-font: NORMAL 20 Tahoma;" text="Address Book" GridPane.columnIndex="0" GridPane.rowIndex="0">
</Label>
<TableView fx:id="tableView" GridPane.columnIndex="0" GridPane.rowIndex="1">
<columns>
<TableColumn text="First Name"></TableColumn>
<TableColumn text="Last Name"></TableColumn>
</columns>
</TableView>
</GridPane>
public class People {
public People(String firstName, String lastName){
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}
private StringProperty firstName;
public void setFirstName(String value) { firstNameProperty().set(value); }
public String getFirstName() { return firstNameProperty().get(); }
public StringProperty firstNameProperty() {
return firstName;
}
private StringProperty lastName;
public void setLastName(String value) { lastNameProperty().set(value); }
public String getLastName() { return lastNameProperty().get(); }
public StringProperty lastNameProperty() {
return lastName;
}
}
您可以像下面这样定义人员表的模型:
<GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<Label style="-fx-font: NORMAL 20 Tahoma;" text="Address Book" GridPane.columnIndex="0" GridPane.rowIndex="0">
</Label>
<TableView fx:id="tableView" GridPane.columnIndex="0" GridPane.rowIndex="1">
<columns>
<TableColumn text="First Name"></TableColumn>
<TableColumn text="Last Name"></TableColumn>
</columns>
</TableView>
</GridPane>
public class People {
public People(String firstName, String lastName){
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}
private StringProperty firstName;
public void setFirstName(String value) { firstNameProperty().set(value); }
public String getFirstName() { return firstNameProperty().get(); }
public StringProperty firstNameProperty() {
return firstName;
}
private StringProperty lastName;
public void setLastName(String value) { lastNameProperty().set(value); }
public String getLastName() { return lastNameProperty().get(); }
public StringProperty lastNameProperty() {
return lastName;
}
}
然后定义检索数据的方法:
private ObservableList<People> fetchPeople(Connection con) throws SQLException {
logger.info("Fetching people from database");
ObservableList<People> people = FXCollections.observableArrayList();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from people");
while (rs.next()) {
people.add(new People(rs.getString("first_name"), rs.getString("last_name")));
}
return people;
}
请参见填写问题表的部分。检索数据部分是Java的核心部分。搜索有关它的教程。但是要注意用检索到的数据更新JavaFXGUI。也就是说,DB抓取必须位于JavaFX主线程以外的其他线程中。为此,请使用JavaFX服务和任务。再次搜索JavaFX:background定期sql查询、JavaFX:GUI冻结DB查询等。谢谢。对不起,我没有看到那条线。下一次研究会更好:没问题。搜索时请参考高级搜索提示。你可以相信我,这是救命稻草。你为什么不想用DataFX呢?