Вот пример:
import javafx.application.Application;
import javafx.collections.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class TableViewBuilderExample extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) {
final ObservableList<?> data = FXCollections.observableArrayList(
new Person("Jacob", "Smith"),
new Person("Isabella", "Johnson")
);
stage.setScene(
new Scene(
TableViewBuilder.create().items((ObservableList<Object>) data).columns(
TableColumnBuilder.create().text("First Name").cellValueFactory(new PropertyValueFactory("firstName")).build(),
TableColumnBuilder.create().text("Last Name").cellValueFactory(new PropertyValueFactory("lastName")).build()
).build()
)
);
stage.show();
}
}
Есть некоторые странные вещи, происходящие с использованием универсального типа в Builders.Вместо этого мне хотелось бы сказать что-то вроде TableViewBuilder<Person>.create()
, но TableViewBuilder
имеет рекурсивный тип в качестве второго параметра универсального типа, который должен быть передан ему, поэтому я не мог заставить эту стратегию работать.Приведенный выше код является следующей лучшей вещью, которую я мог бы придумать, но он все еще имеет некоторую странную типизацию с определением ObservableList<?>
данных и необходимостью преобразовывать данные в ObservableList<Object>
в Builder.
Основываясь на понимании Сергеем синтаксиса параметризации типов для компоновщиков, я смог создать следующий компоновщик, который будет работать с типом данных ObservableList<Person>
TableViewBuilder.<Person>create().items(data).columns(
TableColumnBuilder.<Person, String>create()
.text("First Name").cellValueFactory(new PropertyValueFactory("firstName"))
.build(),
TableColumnBuilder.<Person, String>create()
.text("Last Name").cellValueFactory(new PropertyValueFactory("lastName"))
.build()
).build()
После этого упражнения я будуеще более склонен проверять проект DataFX , если бы мне пришлось много заниматься этим.,.