Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ch.epfl.javions.gui;
- import ch.epfl.javions.Units;
- import ch.epfl.javions.adsb.CallSign;
- import javafx.beans.property.ObjectProperty;
- import javafx.beans.property.ReadOnlyDoubleWrapper;
- import javafx.beans.property.ReadOnlyObjectWrapper;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.collections.ObservableSet;
- import javafx.collections.SetChangeListener;
- import javafx.scene.Node;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.TableView;
- import java.text.NumberFormat;
- import java.text.ParseException;
- import java.util.List;
- import java.util.function.Consumer;
- public final class AircraftTableController {
- private final ObservableSet<ObservableAircraftState> aircraftStates;
- private final ObjectProperty<ObservableAircraftState> selectedAircraftState;
- private final TableView<ObservableAircraftState> tableView;
- public AircraftTableController(ObservableSet<ObservableAircraftState> aircraftStates,
- ObjectProperty<ObservableAircraftState> selectedAircraftState) {
- this.aircraftStates = FXCollections.unmodifiableObservableSet(aircraftStates);
- this.selectedAircraftState = selectedAircraftState;
- ObservableList<ObservableAircraftState> list = FXCollections.observableArrayList(aircraftStates);
- tableView = new TableView<>(list);
- tableView.getStylesheets().add("table.css");
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_SUBSEQUENT_COLUMNS);
- tableView.setTableMenuButtonVisible(true);
- buildTable();
- aircraftStates.addListener((SetChangeListener<ObservableAircraftState>) change -> {
- if (change.wasAdded()) {
- // Add the value to each column cell of the tableView
- tableView.getItems().add(change.getElementAdded());
- }
- else if (change.wasRemoved()) {
- tableView.getItems().remove(change.getElementRemoved());
- }
- });
- }
- public Node pane() {
- return tableView;
- }
- public void setOnDoubleClick(Consumer<ObservableAircraftState> onDoubleClick) {
- tableView.setOnMouseClicked(event -> {
- if (event.getClickCount() == 2 && tableView.getSelectionModel().getSelectedItem() != null) {
- onDoubleClick.accept(tableView.getSelectionModel().getSelectedItem());
- }
- });
- }
- private void buildTable() {
- tableView.getColumns().setAll(List.of(
- createOaciColumn(),
- createCallSignColumn(),
- createRegistrationColumn(),
- createModelColumn(),
- createTypeColumn(),
- createDescriptionColumn(),
- createLatitudeColumn(),
- createLongitudeColumn(),
- createAltitudeColumn(),
- createSpeedColumn()));
- }
- private TableColumn<ObservableAircraftState,?> createSpeedColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Vitesse (km/h)");
- column.getStyleClass().add("numeric");
- column.setCellValueFactory(f -> {
- NumberFormat format = NumberFormat.getInstance();
- format.setMaximumFractionDigits(0);
- if (f.getValue().getVelocity() <= 0) {
- ReadOnlyObjectWrapper<String> wrapper = new ReadOnlyObjectWrapper<>("");
- }
- else {
- ReadOnlyDoubleWrapper wrapper =
- new ReadOnlyDoubleWrapper(Units.convertTo(f.getValue().getVelocity(),
- Units.Speed.KILOMETER_PER_HOUR));
- return wrapper.map(format::format);
- }
- return null;
- });
- setComparator(column);
- return column;
- }
- private TableColumn<ObservableAircraftState,?> createAltitudeColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Altitude (m)");
- column.getStyleClass().add("numeric");
- column.setCellValueFactory(f -> {
- NumberFormat format = NumberFormat.getInstance();
- format.setMaximumFractionDigits(0);
- ReadOnlyDoubleWrapper wrapper =
- new ReadOnlyDoubleWrapper(f.getValue().getAltitude());
- return wrapper.map(format::format);
- });
- setComparator(column);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createOaciColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("OACI");
- column.setCellValueFactory(f ->
- new ReadOnlyObjectWrapper<>(f.getValue().getIcaoAddress().string()));
- column.setPrefWidth(60);
- column.getStyleClass().add("numeric");
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createCallSignColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Indicatif");
- column.setCellValueFactory(f ->
- f.getValue().callSignProperty().map(CallSign::string));
- column.setPrefWidth(70);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createRegistrationColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Immatriculation");
- column.setCellValueFactory(f ->
- new ReadOnlyObjectWrapper<>(f.getValue().getData() != null ?
- f.getValue().getData().registration().string() : ""));
- column.setPrefWidth(90);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createModelColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Modèle");
- column.setCellValueFactory(f ->
- new ReadOnlyObjectWrapper<>(f.getValue().getData() != null ?
- f.getValue().getData().model() : ""));
- column.setPrefWidth(230);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createTypeColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Type");
- column.setCellValueFactory(f ->
- new ReadOnlyObjectWrapper<>(f.getValue().getData() != null ?
- f.getValue().getData().typeDesignator().string() : ""));
- column.setPrefWidth(50);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createDescriptionColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Description");
- column.setCellValueFactory(f ->
- new ReadOnlyObjectWrapper<>(f.getValue().getData() != null ?
- f.getValue().getData().description().string() : ""));
- column.setPrefWidth(70);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createLatitudeColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Latitude (°)");
- column.getStyleClass().add("numeric");
- column.setCellValueFactory(f -> {
- NumberFormat format = NumberFormat.getInstance();
- format.setMinimumFractionDigits(4);
- format.setMaximumFractionDigits(4);
- ReadOnlyDoubleWrapper wrapper =
- new ReadOnlyDoubleWrapper(Units.convertTo(f.getValue().positionProperty().get().latitude(),Units.Angle.DEGREE));
- return wrapper.map(format::format);
- });
- setComparator(column);
- return column;
- }
- private TableColumn<ObservableAircraftState, String> createLongitudeColumn() {
- TableColumn<ObservableAircraftState, String> column = new TableColumn<>("Longitude (°)");
- column.getStyleClass().add("numeric");
- column.setCellValueFactory(f -> {
- NumberFormat format = NumberFormat.getInstance();
- format.setMinimumFractionDigits(4);
- format.setMaximumFractionDigits(4);
- ReadOnlyDoubleWrapper wrapper =
- new ReadOnlyDoubleWrapper(Units.convertTo(f.getValue().positionProperty().get().latitude(),Units.Angle.DEGREE));
- return wrapper.map(format::format);
- });
- setComparator(column);
- return column;
- }
- private void setComparator(TableColumn<ObservableAircraftState, String> column) {
- column.setComparator((s1, s2) -> {
- try {
- NumberFormat format = NumberFormat.getInstance();
- if (s1.isEmpty() || s2.isEmpty()) {
- return s1.compareTo(s2);
- } else {
- return Double.compare(format.parse(s1).doubleValue(), format.parse(s2).doubleValue());
- }
- } catch (ParseException e) {
- return s1.compareTo(s2);
- }
- });
- tableView.getColumns().add(column);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment