1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| package hotelresa;
import java.util.Arrays;
import java.util.stream.IntStream;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.ToolBar;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(final Stage primaryStage) throws Exception {
final TableColumn<Room, RoomAvailability> stateColumn = new TableColumn<>("State");
// Extraction
stateColumn.setCellValueFactory(new PropertyValueFactory<>("availability"));
// Affichage
stateColumn.setCellFactory(tableColumn -> new TableCell<Room, RoomAvailability>() {
@Override
protected void updateItem(RoomAvailability item, boolean empty) {
super.updateItem(item, empty);
String text = null;
String style = null;
if (!empty && item != null) {
switch (item) {
case BOOKED: {
text = "Réservée";
style = "-fx-text-fill: gold;";
}
break;
case EMPTY: {
text = "Inoccupée";
style = "-fx-text-fill: lightgray;";
}
break;
case OCCUPIED: {
text = "Occupée";
style = "-fx-font-weight: bold;";
}
break;
}
}
setText(text);
setStyle(style);
}
});
final TableView<Room> tableView = new TableView<>();
tableView.getColumns().add(stateColumn);
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
//
final RoomAvailability[] states = RoomAvailability.values();
final int roomNumber = 10;
final Room[] model = IntStream.range(0, roomNumber)
.mapToObj(index -> {
final int stateIndex = (int) (states.length * Math.random());
final RoomAvailability state = states[stateIndex];
final Room room = new Room();
room.setAvailability(state);
return room;
})
.toArray(Room[]::new);
tableView.getItems().setAll(model);
//
final Button testButton = new Button("Free all rooms");
// Comme tout est observable, le changement de valeur est automatiquement reporte sur la table !!!!!!!!!!!!!!!!!!! On a rien besoin de faire !!
testButton.setOnAction(actionEvent -> Arrays.stream(model)
.forEach(room -> room.setAvailability(RoomAvailability.EMPTY)));
//
final ToolBar toolBar = new ToolBar();
toolBar.getItems().add(testButton);
//
final BorderPane root = new BorderPane();
root.setCenter(tableView);
root.setTop(toolBar);
final Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String... args) {
Application.launch(args);
}
} |
Partager