javaFX 2.2 – 无法从Controller填充表

我有以下代码.当我尝试运行时,表格不会在GUI上显示记录.你能建议吗?

fxml_tableview.fxml – 描述表结构的fxml.

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

<?import javafx.collections.*?> 
<?import javafx.geometry.Insets?>
<?import java.lang.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.scene.layout.*?>
<?import fxmltableview.*?> 

<Scene width="400" height="550" fx:controller="fxmltableview.FXMLTableViewController" 
       xmlns:fx="http://javafx.com/fxml">

    <GridPane alignment="center" hgap="10" vgap="10">
        <TableView fx:id="tableView" GridPane.columnIndex="0" GridPane.rowIndex="1">
            <columns>
                <TableColumn fx:id="tradeId" text="Trade ID" prefWidth="200"/>
            </columns>    
        </TableView>
    </GridPane>
</Scene>

FXMLTableViewController.java //我正在尝试填充表列的控制器.

 package fxmltableview;

    import java.net.URL;
    import java.util.ResourceBundle;

    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.TableView;

    public class FXMLTableViewController implements Initializable{
        @FXML private TableView<Trade> tableView;
        ObservableList<Trade> data = FXCollections.observableArrayList(new Trade("1"));

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        tableView.setItems (data);
    }
}

FXMLTableView.java // Java主类

   package fxmltableview;

    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Scene;
    import javafx.stage.Stage;

    public class FXMLTableView extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("FXML TableView Example");
        primaryStage.setScene((Scene)FXMLLoader.load(getClass().getResource("fxml_tableview.fxml")));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Trade.java //表的数据模型

   package fxmltableview;

    import javafx.beans.property.SimpleStringProperty;

    public class Trade {

    private SimpleStringProperty tradeId = new SimpleStringProperty("");

    public Trade(String tradeId) {
        setTradeId(tradeId);
    }

    public String getTradeId() {
        return tradeId.get();
    }

    public void setTradeId(String a) {
        tradeId.set(a);
    }
}

最佳答案 快速猜测是您忘记设置表列的单元格值工厂.

@FXML private TableColumn<Trade, String> tradeId;

然后在init:

tradeId.setCellValueFactory(new PropertyValueFactory<Trade, String>("tradeId"));
点赞