在javafx中填充tableview

时间:2017-06-08 18:40:29

标签: java javafx tableview tablecolumn

我想在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

1 个答案:

答案 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中的控件都是如此。但是如果你不能或者根本不想这样做,请随意使用上面的方法,但请记住,值的变化不会自动通知视图!