我在TableView
中有FXML
,我想将它的项属性绑定到控制器中的列表(就像在WPF
中一样),我的{{ 1}}代码是这样的:
FXML
我的控制器如下:
<TableView fx:controller="controllers.MyController" items="$controller.loggings">
<columns>
<TableColumn text="Nom">
<cellValueFactory>
<PropertyValueFactory property="name" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Type">
<cellValueFactory>
<PropertyValueFactory property="type" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
出于某种原因public class MyController {
public ObservableList<Logging> loggings = FXCollections.observableArrayList();
@FXML
protected void initialize(){
loggings.add(new Logging(){{
setName("hilton");
setType("hotel");
}});
}
}
启动。我做错了什么?
答案 0 :(得分:1)
您尚未声明fx
命名空间:
<TableView xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MyController" items="$controller.loggings">
...
</TableView>
此外,控制器类需要包含loggings
字段的getter:
private final ObservableList<Logging> loggings = FXCollections.observableArrayList();
public ObservableList<Logging> getLoggings() {
return loggings;
}
注意: JavaFX不考虑表达式绑定的字段,因此需要getter。
答案 1 :(得分:0)
您的FXML文件错误。您必须将项目分配给控制器类中的TableView
。
FXML文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<TableView xmlns:fx="http://javafx.com/fxml" fx:controller="controllers.MyController" fx:id="tableView">
<columns>
<TableColumn text="Nom">
<cellValueFactory>
<PropertyValueFactory property="name" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Type">
<cellValueFactory>
<PropertyValueFactory property="type" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
控制器:
package controllers;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableView;
public class MyController {
@FXML
private TableView<Logging> tableView;
public ObservableList<Logging> loggings = FXCollections.observableArrayList();
@FXML
protected void initialize(){
loggings.add(new Logging(){{
setName("hilton");
setType("hotel");
}});
tableView.setItems(loggings);
}
}