diff --git a/nbproject/project.properties b/nbproject/project.properties index 20b5033ff6eb1d4fa6e1fd821012ea6b3171184b..71d9fbf01c81df93f567d81c71aaaba7dc0f0302 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,139 +1,139 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -application.title=SIR -application.vendor=valen -auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.modulepath=\ - ${run.modulepath} -debug.test.classpath=\ - ${run.test.classpath} -debug.test.modulepath=\ - ${run.test.modulepath} -# Files in build.classes.dir which should be excluded from distribution jar -dist.archive.excludes= -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/SIR.jar -dist.javadoc.dir=${dist.dir}/javadoc -dist.jlink.dir=${dist.dir}/jlink -dist.jlink.output=${dist.jlink.dir}/SIR -endorsed.classpath= -excludes= -file.reference.javafx-swt.jar=javafx-sdk-21.0.6/lib/javafx-swt.jar -file.reference.javafx.base.jar=javafx-sdk-21.0.6/lib/javafx.base.jar -file.reference.javafx.controls.jar=javafx-sdk-21.0.6/lib/javafx.controls.jar -file.reference.javafx.fxml.jar=javafx-sdk-21.0.6/lib/javafx.fxml.jar -file.reference.javafx.graphics.jar=javafx-sdk-21.0.6/lib/javafx.graphics.jar -file.reference.javafx.media.jar=javafx-sdk-21.0.6/lib/javafx.media.jar -file.reference.javafx.swing.jar=javafx-sdk-21.0.6/lib/javafx.swing.jar -file.reference.javafx.web.jar=javafx-sdk-21.0.6/lib/javafx.web.jar -file.reference.ojdbc17.jar=libs/ojdbc17.jar -includes=** -jar.archive.disabled=${jnlp.enabled} -jar.compress=false -jar.index=${jnlp.enabled} -javac.classpath=\ - ${file.reference.ojdbc17.jar} -# Space-separated list of extra javac options -javac.compilerargs=\ --enable-preview -javac.deprecation=false -javac.external.vm=true -javac.modulepath=\ - ${file.reference.javafx-swt.jar}:\ - ${file.reference.javafx.base.jar}:\ - ${file.reference.javafx.controls.jar}:\ - ${file.reference.javafx.fxml.jar}:\ - ${file.reference.javafx.graphics.jar}:\ - ${file.reference.javafx.media.jar}:\ - ${file.reference.javafx.swing.jar}:\ - ${file.reference.javafx.web.jar} -javac.processormodulepath= -javac.processorpath=\ - ${javac.classpath} - -javac.source=23 -javac.target=23 - -javac.test.classpath=\ - ${javac.classpath} -javac.test.modulepath=\ - ${javac.modulepath}:\ - ${build.classes.dir} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.html5=false -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -# The jlink additional root modules to resolve -jlink.additionalmodules= -# The jlink additional command line parameters -jlink.additionalparam= -jlink.launcher=true -jlink.launcher.name=SIR -jnlp.codebase.type=no.codebase -jnlp.descriptor=application -jnlp.enabled=false -jnlp.mixed.code=default -jnlp.offline-allowed=false -jnlp.signed=false -jnlp.signing= -jnlp.signing.alias= -jnlp.signing.keystore= -main.class=ui.loader.ConnexionPage -# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. -manifest.custom.application.library.allowable.codebase= -# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. -manifest.custom.caller.allowable.codebase= -# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed -manifest.custom.codebase= -# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions) -manifest.custom.permissions= -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project. -# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. -# To set system properties for unit tests define test-sys-prop.name=value: -run.jvmargs=\ --enable-preview -run.modulepath=\ - ${javac.modulepath} -run.test.classpath=\ - ${javac.test.classpath} -run.test.modulepath=\ - ${javac.test.modulepath} -source.encoding=UTF-8 -src.dir=src -test.src.dir=test -javac.classpath=\ - ${file.reference.ojdbc17.jar} - +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=SIR +application.vendor=valen +auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/SIR.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/SIR +endorsed.classpath= +excludes= +file.reference.javafx-swt.jar=javafx-sdk-21.0.6/lib/javafx-swt.jar +file.reference.javafx.base.jar=javafx-sdk-21.0.6/lib/javafx.base.jar +file.reference.javafx.controls.jar=javafx-sdk-21.0.6/lib/javafx.controls.jar +file.reference.javafx.fxml.jar=javafx-sdk-21.0.6/lib/javafx.fxml.jar +file.reference.javafx.graphics.jar=javafx-sdk-21.0.6/lib/javafx.graphics.jar +file.reference.javafx.media.jar=javafx-sdk-21.0.6/lib/javafx.media.jar +file.reference.javafx.swing.jar=javafx-sdk-21.0.6/lib/javafx.swing.jar +file.reference.javafx.web.jar=javafx-sdk-21.0.6/lib/javafx.web.jar +file.reference.ojdbc17.jar=libs/ojdbc17.jar +includes=** +jar.archive.disabled=${jnlp.enabled} +jar.compress=false +jar.index=${jnlp.enabled} +javac.classpath=\ + ${file.reference.ojdbc17.jar} +# Space-separated list of extra javac options +javac.compilerargs=\ --enable-preview +javac.deprecation=false +javac.external.vm=true +javac.modulepath=\ + ${file.reference.javafx-swt.jar}:\ + ${file.reference.javafx.base.jar}:\ + ${file.reference.javafx.controls.jar}:\ + ${file.reference.javafx.fxml.jar}:\ + ${file.reference.javafx.graphics.jar}:\ + ${file.reference.javafx.media.jar}:\ + ${file.reference.javafx.swing.jar}:\ + ${file.reference.javafx.web.jar} +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} + +javac.source=22 +javac.target=22 + +javac.test.classpath=\ + ${javac.classpath} +javac.test.modulepath=\ + ${javac.modulepath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=SIR +jnlp.codebase.type=no.codebase +jnlp.descriptor=application +jnlp.enabled=false +jnlp.mixed.code=default +jnlp.offline-allowed=false +jnlp.signed=false +jnlp.signing= +jnlp.signing.alias= +jnlp.signing.keystore= +main.class=ui.loader.ConnexionPage +# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. +manifest.custom.application.library.allowable.codebase= +# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. +manifest.custom.caller.allowable.codebase= +# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed +manifest.custom.codebase= +# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions) +manifest.custom.permissions= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs=\ --enable-preview +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test +javac.classpath=\ + ${file.reference.ojdbc17.jar} + diff --git a/src/ui/ManipController.java b/src/ui/ManipController.java deleted file mode 100644 index 94a0ef1e8183610566f4d9deb6a4de08ebc31301..0000000000000000000000000000000000000000 --- a/src/ui/ManipController.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template - */ -package ui; - -import fc.Dmr; -import fc.DmrPatient; -import fc.Examen; -import fc.Genre; -import static fc.MessageDErreur.validerDate; -import static fc.MessageDErreur.validerNom; -import static fc.MessageDErreur.validerNumeroSecu; -import static fc.MessageDErreur.validerPrenom; -import fc.Pacs; -import fc.Patient; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URL; -import java.sql.Date; -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.ArrayList; -import java.util.List; -import java.util.ResourceBundle; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.fxml.Initializable; -import javafx.scene.Node; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ComboBox; -import javafx.scene.control.DatePicker; -import javafx.scene.control.Label; -import javafx.scene.control.ListView; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.TextField; -import javafx.scene.control.cell.PropertyValueFactory; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import javafx.stage.Stage; -import javafx.util.Pair; - -/** - * FXML Controller class - * - * @author valen - */ -public class ManipController implements Initializable { - - /** - * Initializes the controller class. - */ - @FXML - private ListView liste_image = new ListView(); - - @FXML - private ListView liste_dmr = new ListView(); - - @FXML - private CheckBox pasDImage; - - @FXML - private ImageView image = new ImageView(); - - @FXML - private TextField fieldDMR = new TextField(); - - @FXML - private TableView<DmrPatient> tableViewDmrPatient; - @FXML - private TableView<Patient> tableViewPatient; - - @FXML - private TableColumn<Patient, String> columnIpp; - @FXML - private TableColumn<Patient, String> columnNom; - @FXML - private TableColumn<Patient, String> columnPrenom; - @FXML - private TableColumn<DmrPatient, String> columnMotif; - @FXML - private TableColumn<DmrPatient, String> columnDateOuverture; - - @FXML - private TableColumn<DmrPatient, String> columnNomDmr; - @FXML - private TableColumn<DmrPatient, String> columnPrenomDmr; - - @FXML - private TextField fieldRecherhe = new TextField(); - - @FXML - private Label messageLabel; - - @FXML - private DatePicker fieldDateNaissance = new DatePicker(); - - @FXML - private DatePicker fieldExamen = new DatePicker(); - - @FXML - private ComboBox<Integer> comboBoxH; - - @FXML - private ComboBox<Integer> comboBoxMin; - - @FXML - private ComboBox<String> comboImagerie; - - @FXML - private ComboBox<String> comboAnat; - - @Override - public void initialize(URL url, ResourceBundle rb) { - // TODO - columnIpp.setCellValueFactory(new PropertyValueFactory<>("IPP")); - columnNom.setCellValueFactory(new PropertyValueFactory<>("nom")); - columnPrenom.setCellValueFactory(new PropertyValueFactory<>("prenom")); - - columnDateOuverture.setCellValueFactory(new PropertyValueFactory<>("dateOuverture")); - columnMotif.setCellValueFactory(new PropertyValueFactory<>("motif")); - columnNomDmr.setCellValueFactory(new PropertyValueFactory<>("nom")); - columnPrenomDmr.setCellValueFactory(new PropertyValueFactory<>("prenom")); - - Pacs p = new Pacs(); - liste_image.setItems(p.ListImage()); - - Dmr dmr = new Dmr(); - List<Dmr> dmr_actif = dmr.dmrActiver(); - List<DmrPatient> DmrPatient = new ArrayList<>(); - for (Dmr d : dmr_actif) { - Patient pat = new Patient(); - DmrPatient.add(new DmrPatient(d, pat.rechercherPatients(d.getIPP(), null, null, null, null, null).get(0))); - } - ObservableList<DmrPatient> patient_actif = FXCollections.observableArrayList(DmrPatient); - tableViewDmrPatient.setItems(patient_actif); - comboImagerie.getItems().add("Radio"); - comboImagerie.getItems().add("IRM"); - comboImagerie.getItems().add("Scanner"); - comboAnat.getItems().add("abdomen"); - comboAnat.getItems().add("sinus"); - comboAnat.getItems().add("brain"); - - for (int i = 0; i <= 24; i++) { - comboBoxH.getItems().add(i); - } - - for (int i = 0; i <= 60; i++) { - comboBoxMin.getItems().add(i); - } - - LocalTime currentTime = LocalTime.now(); - - int heure = currentTime.getHour(); // Récupère l'heure - int minute = currentTime.getMinute(); - - // Optionnel : définir une valeur par défaut - comboBoxH.setValue(heure); - comboBoxMin.setValue(minute); - - liste_image.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { - if (newValue != null) { // Vérifie qu'un élément est sélectionné - - System.out.println("Image sélectionnée : " + newValue); - actionSurSelection(p.pathWithNom(newValue.toString())); - - } - }); - tableViewPatient.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { - if (newValue != null) { // Vérifie qu'un élément est sélectionné - - actionSurSelectionPatient(newValue); - - } - }); - - } - - private void actionSurSelection(String path) { - try { - //Image image2 = new Image("file:" + "src/jpg/abdomen/cor494-i436.jpg"); - Image image2 = new Image(new FileInputStream(path));// Assurez-vous que le chemin est correct - this.image.setImage(image2); - this.image.setPreserveRatio(true); - this.image.setFitWidth(250); - this.image.setFitHeight(250); - - System.out.println("Image chargée : "); - } catch (Exception e) { - System.out.println("Erreur de chargement de l'image : " + e.getMessage()); - } - - } - - private void actionSurSelectionPatient(Patient patient) { - List<Dmr> dmrs = patient.recupererDMR(); - List<DmrPatient> DmrPatient = new ArrayList<>(); - for (Dmr d : dmrs) { - Patient pat = new Patient(); - DmrPatient.add(new DmrPatient(d, pat.rechercherPatients(d.getIPP(), null, null, null, null, null).get(0))); - } - ObservableList<DmrPatient> patient_actif = FXCollections.observableArrayList(DmrPatient); - tableViewDmrPatient.setItems(patient_actif); - - } - - @FXML - - private void actionRechercher() { - String rechercheUnifiee = fieldRecherhe.getText().trim(); - messageLabel.setText(""); - - // Validation simplifiée - if (rechercheUnifiee.isEmpty()) { - messageLabel.setText("Veuillez entrer un critère de recherche"); - return; - } - - // Utilisation de la nouvelle méthode de recherche - Patient patient = new Patient(); - Pair<List<Patient>, String> result = patient.rechercherPatients2(rechercheUnifiee); - - // Gestion des erreurs - if (!result.getValue().isEmpty()) { - messageLabel.setText(result.getValue()); - } - - // Affichage des résultats - ObservableList<Patient> items = FXCollections.observableArrayList(result.getKey()); - tableViewPatient.setItems(items); - } - - @FXML - private void actionDeconnexion(ActionEvent event) { - try { - // Charger la page de connexion - - Parent root = FXMLLoader.load(getClass().getResource("ConnexionPage.fxml")); - - // Obtenir la scène actuelle et la fenêtre - Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); - - Scene scene = new Scene(root); - - // Changer la scène pour la page de connexion - stage.setScene(scene); - stage.setTitle("Page de Connexion"); - stage.setFullScreen(true); - stage.show(); - } catch (IOException e) { - e.printStackTrace(); - // Afficher un message d'erreur à l'utilisateur si nécessaire - } - } - - @FXML - private void actionValider() { - // Vérification des sélections obligatoires - if (tableViewDmrPatient.getSelectionModel().getSelectedItems().isEmpty()) { - System.out.println("Aucun DMR sélectionné"); - return; - } - - DmrPatient dmrselect = tableViewDmrPatient.getSelectionModel().getSelectedItems().get(0); - LocalDate selectedDate = fieldExamen.getValue(); - Integer selectedItemH = comboBoxH.getValue(); - Integer selectedItemM = comboBoxMin.getValue(); - String imagerie = comboImagerie.getValue(); - String anatomie = comboAnat.getValue(); - - // Validation des champs obligatoires - if (dmrselect == null || selectedDate == null || selectedItemH == null - || selectedItemM == null || imagerie == null || anatomie == null) { - System.out.println("Tous les champs obligatoires ne sont pas remplis"); - return; - } - - // Formatage de la date - String date = selectedDate.toString() + " " + selectedItemH + ":" + selectedItemM; - System.out.println("date : " + date); - - // Gestion de l'image - String chemin = null; - boolean sansImage = pasDImage.isSelected(); - - if (!sansImage) { - if (liste_image.getSelectionModel().getSelectedItems().isEmpty()) { - System.out.println("Aucune image sélectionnée et la case 'Pas d'image' n'est pas cochée"); - return; - } - String imageselect = (String) liste_image.getSelectionModel().getSelectedItems().get(0); - Pacs p = new Pacs(); - chemin = p.pathWithNom(imageselect); - System.out.println("Image sélectionnée: " + chemin); - } - - // Création de l'examen - Examen ex = new Examen(); - String acte = imagerie + " " + anatomie; - System.out.println("Création d'examen - Motif: " + dmrselect.getMotif() + ", Acte: " + acte); - - boolean succes = ex.creerExamen(dmrselect.getId_dmr(), date, chemin, acte); - - if (succes) { - System.out.println("Examen créé avec succès"); - // Rafraîchir l'interface - this.initialize(null, null); - } else { - System.out.println("Échec de la création de l'examen"); - } - } - -} diff --git a/src/ui/fxml/connexionPage.fxml b/src/ui/fxml/connexionPage.fxml index f9fd550c7d0862d5616b95c419dc2e564ead1e98..b9a05323f85fcae9ddee6526956d33c9860718cc 100644 --- a/src/ui/fxml/connexionPage.fxml +++ b/src/ui/fxml/connexionPage.fxml @@ -5,22 +5,61 @@ <?import javafx.scene.control.PasswordField?> <?import javafx.scene.control.TextField?> <?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> -<VBox fx:id="vbox" alignment="CENTER" centerShape="false" onKeyPressed="#handleButtonValider" prefHeight="300" prefWidth="400" spacing="10" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.Controller.ConnexionPageController"> - <ImageView fx:id="image" disable="true" fitHeight="55.0" fitWidth="393.0" nodeOrientation="INHERIT" pickOnBounds="true" smooth="false"> - - </ImageView> - <Label maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" text="Bienvenue au service de radiologie"> - <font> - <Font name="Calibri Bold Italic" size="20.0" /> - </font> - </Label> - <Label text="Identifiant :" /> - <TextField fx:id="textFieldIdentifiant" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" promptText="Entrez votre identifiant" /> - <Label text="Mot de passe :" /> - <PasswordField fx:id="passwordField" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" promptText="Entrez votre mot de passe" /> - <Button fx:id="buttonValider" onAction="#handleButtonValider" text="Valider" translateY="-3.0" /> - <Label fx:id="errorLabel" /> -</VBox> +<BorderPane style="-fx-background-color: #f5f9ff;" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.Controller.ConnexionPageController"> + + <!-- Contenu principal au centre --> + <center> + <HBox alignment="CENTER" spacing="50" style="-fx-padding: 50;"> + <!-- Colonne de gauche - Logo --> + <VBox alignment="CENTER" prefWidth="350" spacing="20"> + <ImageView fx:id="image" fitHeight="150" fitWidth="300" preserveRatio="true" smooth="true" /> + <VBox alignment="CENTER_LEFT" spacing="10"> + <Label style="-fx-text-fill: #2c3e50;" text="DMR - Dossier Médical"> + <font><Font name="System Bold" size="28.0" /></font> + </Label> + <Label style="-fx-text-fill: #3498db;" text="Service de Radiologie"> + <font><Font name="System Bold" size="24.0" /></font> + </Label> + <Label style="-fx-text-fill: #7f8c8d; -fx-padding: 20 0 0 0;" text="Accès sécurisé aux dossiers patients"> + <font><Font name="System" size="14.0" /></font> + </Label> + </VBox> + </VBox> + + <!-- Colonne de droite - Formulaire --> + <VBox alignment="CENTER" spacing="20" style="-fx-background-color: white; -fx-background-radius: 10; -fx-padding: 40; -fx-effect: dropshadow(gaussian, rgba(0,0,0,0.1), 10, 0, 0, 5); -fx-min-width: 350;"> + <Label style="-fx-text-fill: #2c3e50;" text="Connexion"> + <font><Font name="System Bold" size="20.0" /></font> + </Label> + + <VBox alignment="CENTER_LEFT" spacing="15" style="-fx-padding: 20 0 0 0;"> + <VBox alignment="CENTER_LEFT" spacing="5"> + <Label style="-fx-text-fill: #2c3e50; -fx-font-weight: bold;" text="Identifiant" /> + <TextField fx:id="textFieldIdentifiant" promptText="Entrez votre identifiant" style="-fx-pref-width: 280; -fx-pref-height: 40; -fx-background-radius: 5; -fx-border-radius: 5; -fx-border-color: #bdc3c7; -fx-border-width: 1;" /> + </VBox> + + <VBox alignment="CENTER_LEFT" spacing="5"> + <Label style="-fx-text-fill: #2c3e50; -fx-font-weight: bold;" text="Mot de passe" /> + <PasswordField fx:id="passwordField" promptText="Entrez votre mot de passe" style="-fx-pref-width: 280; -fx-pref-height: 40; -fx-background-radius: 5; -fx-border-radius: 5; -fx-border-color: #bdc3c7; -fx-border-width: 1;" /> + </VBox> + + <Label fx:id="errorLabel" style="-fx-text-fill: #e74c3c; -fx-wrap-text: true; -fx-max-width: 280;" /> + + <Button fx:id="buttonValider" onAction="#handleButtonValider" style="-fx-background-color: #3498db; -fx-text-fill: white; -fx-font-weight: bold; -fx-pref-width: 280; -fx-pref-height: 45; -fx-background-radius: 5;" text="Se connecter" /> + </VBox> + </VBox> + </HBox> + </center> + + <!-- Pied de page en bas --> + <bottom> + <HBox alignment="CENTER" style="-fx-padding: 20; -fx-background-color: #f5f9ff;"> + <Label style="-fx-text-fill: #7f8c8d; -fx-font-size: 11;" text="© 2025 Service de Radiologie - Tous droits réservés" /> + </HBox> + </bottom> +</BorderPane>