IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Conversion d'un JFileChooser en FileChooser


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut Conversion d'un JFileChooser en FileChooser
    Bonjour à tous !

    Sur un précédent programme j'ai créé une fonction de sauvegarde grace à un JFileChooser car j'avais construit mon interface graphique avec Swing.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    sauvegarder.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				JFileChooser sauver = new JFileChooser();
    				sauver.setDialogTitle("Sauvegarder");
    				sauver.showSaveDialog(null);
    				File nomInter = sauver.getSelectedFile();
    				String testage = sauver.getSelectedFile().getName();
    				int n = 4;
    				int length = testage.length();
    				if (length < 4) {
    					JFrame frameCorrec = new JFrame();
    					JOptionPane.showMessageDialog(frameCorrec, "Vous devez entrer un nom d'au moins 4 caractères !");
    				}
    				else {
    					String fin = testage.substring(length -n, length);
    					if (fin.equals("noty")) { // Pour ne pas ajouter l'extension ".noty" si elle est déjà présente dans le nom.
    						nomFichier = sauver.getSelectedFile() + "";
    					}
    					else {
    						nomFichier = sauver.getSelectedFile() + ".noty";
    					}
    					if (nomInter != null) {
    						Path path = Paths.get(nomFichier);
    						try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(path))) { // Ecriture des variables nécessaires à la sauvegarde dans un fichier.
    							out.writeUTF(base.Variables.prenom);
    							out.writeInt(base.Variables.genre);
    							out.writeUTF(base.Variables.situation);
    						} catch (IOException h) {
    							h.printStackTrace();
    						}
    						JFrame frameInfo = new JFrame();
    						JOptionPane.showMessageDialog(frameInfo, "Partie sauvegardée avec succès !", "Information", JOptionPane.INFORMATION_MESSAGE);
    					}
    				}
    			}
    		});
    J'ai tenté de réutiliser ce code dans mon nouveau programme à la différence près que cette fois-ci je construit l'interface graphique avec JavaFX (je débute et c'est vraiment pas mal ).
    J'ai commencé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @FXML
    	protected void save() {
    		FileChooser sauver = new FileChooser();
    		sauver.setTitle("Sauvegarder");
    		sauver.showSaveDialog(null);
    		File nomInter = sauver.getSelectedFile();
    	}
    Mais à la dernière ligne la méthode "getSelectedFile()" n'est pas applicable avec un FileChooser (contrairement au JFileChooser). J'ai regardé dans la doc Java et je ne vois pas de méthode équivalente...

    Y aurait-il une âme charitable pour m'aider à convertir le code réalisé avec Swing en code compatible JavaFX ?
    Merci par avance.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 093
    Par défaut
    Tu es bien sure d'avoir regarder la doc ? https://docs.oracle.com/javase/8/jav....stage.Window-

    Les méthode showBlablablaDialog() retournent un File (ou null)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Pour ceux que cela pourrait intéresser, voici comment je me suis débrouillé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @FXML
    	protected void save() {
    		Path pathy = null;
    		FileChooser sauver = new FileChooser();
    		sauver.setTitle("Sauvegarder");
    		sauver.getExtensionFilters().add(new FileChooser.ExtensionFilter("Sarinoty File", "*.noty"));
    		sauver.setInitialFileName(ressources.Variables.prenom + ".noty");
    		File nomInter = sauver.showSaveDialog(null);
    		String pathInter = nomInter.getPath();
    		String testage = nomInter.getName();
    		int n = 4;
    		int length = testage.length();
    		if (length < n) {
    			Alert alert2a = new Alert(AlertType.INFORMATION);
    			alert2a.setTitle("Warnine !");
    			alert2a.setHeaderText("Veuillez entrer au moins 4 caractères.");
    			alert2a.show();
    		}
    		else {
    			String fin = testage.substring(length - n, length);
    			if (fin.equals("noty") == true)
    				pathy = Paths.get(pathInter);
    			else
    				pathy = Paths.get(pathInter + ".noty"); 
    			if (nomInter != null) {
    				try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(pathy))) {
    					out.writeUTF(ressources.Variables.prenom);
    					out.writeInt(ressources.Variables.sexe);
    					out.writeInt(ressources.Variables.etat);
    					out.writeInt(ressources.Variables.etatAutorise);
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				Alert alert2b = new Alert(AlertType.INFORMATION);
    				alert2b.setTitle("Success !");
    				alert2b.setHeaderText("Partie sauvegardée avec succès !");
    				alert2b.show();
    			}
    		}
    J'imagine qu'on peut faire bien plus propre comme code mais en tout cas ça fonctionne.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 896
    Billets dans le blog
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File nomInter = sauver.showSaveDialog(null);
    		String pathInter = nomInter.getPath();
    Bonjour la NullPointerException lorsque l'utilisateur appuie sur le bouton annuler
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Ah...
    Effectivement j'ai oublié de tester ce bouton.
    Je corrige ça dès que je peux et je mets à jour mon code.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Voici le code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @FXML
    	protected void save() {
    		Path pathy = null;
    		FileChooser sauver = new FileChooser();
    		sauver.setTitle("Sauvegarder");
    		sauver.getExtensionFilters().add(new FileChooser.ExtensionFilter("Sarinoty File", "*.noty"));
    		sauver.setInitialFileName(ressources.Variables.prenom + ".noty");
    		File nomInter = sauver.showSaveDialog(null);
    		if (nomInter == null)
    			whatToDo();
    		else {
    			String pathInter = nomInter.getPath();
    			String testage = nomInter.getName();
    			int n = 4;
    			int length = testage.length();
    			if (length < n) {
    				Alert alert2a = new Alert(AlertType.INFORMATION);
    				alert2a.setTitle("Warnine !");
    				alert2a.setHeaderText("Veuillez entrer au moins 4 caractères.");
    				alert2a.show();
    			}
    			else {
    				String fin = testage.substring(length - n, length);
    				if (fin.equals("noty") == true)
    					pathy = Paths.get(pathInter);
    				else
    					pathy = Paths.get(pathInter + ".noty"); 
    				if (nomInter != null) {
    					try (DataOutputStream out = new DataOutputStream(Files.newOutputStream(pathy))) {
    						out.writeUTF(ressources.Variables.prenom);
    						out.writeInt(ressources.Variables.sexe);
    						out.writeInt(ressources.Variables.etat);
    						out.writeInt(ressources.Variables.etatAutorise);
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
    					Alert alert2b = new Alert(AlertType.INFORMATION);
    					alert2b.setTitle("Success !");
    					alert2b.setHeaderText("Partie sauvegardée avec succès !");
    					alert2b.show();
    				}
    			}
    			}
    		}
    En fait j'ai renvoyé dans le programme en cas de retour "null" du FileChooser.

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 896
    Billets dans le blog
    54
    Par défaut
    Prochaine étape : faire la sauvegarde dans une tache de fond sans bloquer l'affichage...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Houla, je n'ai jamais abordé le concept de tâche de fond...

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 896
    Billets dans le blog
    54
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Oh ben ça tombe carrément bien ! mdr
    Merci pour le lien, je vais creuser ça asap. 😉

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre JFileChooser et FileChooser
    Par pendoRa dans le forum JavaFX
    Réponses: 10
    Dernier message: 25/05/2012, 11h10
  2. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  3. Algorithme de conversion de RTF vers HTML
    Par youtch dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/09/2002, 12h35
  4. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h25
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo