我有以下代码.当我尝试运行时,表格不会在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"));