我想在JavaFX中填充 <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/firstRow"
android:layout_width="match_parent"
android:layout_height="wrap_content">
.
.
.
</LinearLayout>
<TextView
android:id="@+id/theTextView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="@id/firstRow"
android:text="lorem ipsom lorem ipsom">
</RelativeLayout>
。我的类是TableView
,它有另一个对象,如属性(Manual
)。如何使用User
对象中的用户名填充表列。
User
我在columnVanzator.setCellFactory(new Callback<TableColumn<Manual, User>,
TableCell<Manual, User>>() {
@Override
public TableCell<Manual, User> call(TableColumn<Manual, User> arg0) {
final TableCell<Manual, User> cell = new TableCell<Manual, User>() {
@Override
public void updateItem(final User item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
this.setText("");
}
else {
this.setText(item.getUsername());
}
}
};
return cell;
}
});
NullPointerException
答案 0 :(得分:1)
您要找的不是cellFactory,而是值工厂。 如果您在Column中显示的类型比String或Number更复杂(例如Date,State或甚至更复杂的类型),则使用自定义cellFactory。
JavaFX'cellValueFactory最适合使用Properties:
column.setCellValueFactory((p) -> p.getValue().yourContentProperty());
但是看起来你的Object中没有JavaFX属性,所以我们必须构建一个小的解决方法:
column.setCellValueFactory((p) -> new SimpleStringProperty(p.getValue().getUsername());
我建议在JavaFX-Style中构建模型并在其中包含Properties。如果某个值在Property内发生更改,TableView将自动更新Cell。几乎每个JavaFX中的控件都是如此。但是如果你不能或者根本不想这样做,请随意使用上面的方法,但请记住,值的变化不会自动通知视图!