提问者:小点点

如何填充在JavaFx Scene Builder中设计的fxml文件中定义的TableView


我想知道如何用数据填充TableView。。。我看到的所有示例都创建了一个包含列和所有内容的TableView,并将其添加到场景中。所有这些都是在java代码本身中完成的。

我想知道的是:如果我在JavaFx场景构建器中设计我的“表单”。定义那里的所有表和列。我如何访问它以从java填充它?或者如果有人能给我指出一个合适的教程,谢谢。

我已经在JavaFx Scene Builder中定义了我的表单-只有一个具有3列的TableView

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml">
<children>
    <TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0">
    <columns>
        <TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" />
        <TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" />
        <TableColumn prefWidth="75.0" text="Active" fx:id="Active" />
    </columns>
    </TableView>
</children>
</AnchorPane>

我有我的数据在一个ResultSet在我的Java代码。

ResultSet rs = c.createStatement().executeQuery(SQL);

我需要填充表格视图。

谢谢你。


共2个答案

匿名用户

要访问表视图,您需要定义FXML页面的控制器。添加

fx:controller="path.to.MyController"

属性添加到FXML文件中的AnchorPane。然后通过将@FXML注释放在这些变量前面,创建控制器并从FXML文件链接TableView、TableColumns:

package path.to;

public class MyController implements Initializable {

    @FXML private TableView<User> tableView;
    @FXML private TableColumn<User, String> UserId;
    @FXML private TableColumn<User, String> UserName;
    @FXML private TableColumn<User, String> Active;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id"));
        UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name"));
        Active.setCellValueFactory(new PropertyValueFactory<User, String>("active"));

        tableView.getItems().setAll(parseUserList());
    }
    private List<User> parseUserList(){
        // parse and construct User datamodel list by looping your ResultSet rs
        // and return the list   
    }
}

表视图是在<code>initialize</code>方法中填充的。请注意,在控制器中,我们没有创建新的表视图或表列,因为它们已经在加载FXML文件时创建。还要注意,TableView和Tablecolumn变量名必须与相应FXML文件中的fx:id值相同。因此,虽然UserId、UserName和Active名称不方便命名,但在FXML文件和Controller中将它们分别更改为userIdCol、userNameCol和userActiveCol等名称。

匿名用户

您可以在控制器中执行此操作:

 @FXML
private TableView<User> table;
private List<User> users;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // Set the columns width auto size
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for id column size
    table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33));   // 33% for dt column size
    table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for cv column size
    table.getItems().setAll(this.users);
}