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 :

Import d'une extension Java dans SceneBuilder


Sujet :

JavaFX

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut Import d'une extension Java dans SceneBuilder
    Bonjour,

    J'ai créé une extension de TextField dans une class java sous Eclipse de façon à filtrer les chiffres du reste :
    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
    package validatetextfields;
     
    import javafx.scene.control.TextField;
     
    public class NumberTextField extends TextField{
     
    	public NumberTextField(){
    		/*this.setPromptText("nombre seulement");*/
    	}	
    		@Override
    		public void replaceText(int i, int i1, String string) {
    			if (string.matches("[0-9]") || string.isEmpty() ){
    				super.replaceText(i, i1, string);
    			}
    		}
    		@Override
    		public void replaceSelection(String string){
    			super.replaceSelection(string);
    		}
    }
    Pour l'instant je l'importe directement dans ma feuille FXML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <?import javafx.scene.control.TextField?>
    <?import javafx.scene.layout.Pane?>
    <?import validatetextfields.*?>
    
    <Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
       <children>
          <NumberTextField fx:id="TF" layoutX="212.0" layoutY="134.0" />
       </children>
    </Pane>
    Mais, mon NumberTextField n'est évidement pas reconnu dans SceneBuilder (Selection contains unresolved reference), même si il fonctionne parfaitement lorsque je lance mon application et lorsque je fais une modification de ma feuille FXML cela supprime l'import automatiquement.

    Je me demandais donc, peut-on importer une extension comme la mienne dans SceneBuilder?

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Prenons par exemple le contrôle suivant :

    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
    package test;
     
    import javafx.beans.property.SimpleStringProperty;
    import javafx.beans.property.StringProperty;
    import javafx.scene.control.TextField;
     
    public class TestTextField extends TextField {
     
        private final StringProperty description = new SimpleStringProperty(this, "description", null);
     
        public final String getDescription() {
            return description.get();
        }
     
        public final void setDescription(final String value) {
            description.set(value);
        }
     
        public final StringProperty descriptionProperty() {
            return description;
        }
    }
    Il te faut packager ton controle dans un JAR et ensuite l'importer dans SceneBuilder.
    Dans SceneBuilder 8.3.0, clique sur le petit engrenage tout à droite de Library.
    Nom : Sans titre.jpg
Affichages : 551
Taille : 181,5 Ko

    Sélectionne ensuite JAR/FXML Manager puis Add Library/FXML from file system et navigue jusqu'au JAR de ton contrôle et sélectionne-le.

    Tu vas ensuite avoir une boite de dialogue qui te permet de sélectionner le ou les controles présents dans le JAR et que tu veux ajouter à SceneBuilder.
    Nom : Sans titre2.jpg
Affichages : 530
Taille : 44,2 Ko

    Quand c'est fait, clique sur Import Component puis sur Close.
    Ton contrôle sera désormais listé dans la catégorie Custom, sous Library.
    Nom : Sans titre3.jpg
Affichages : 507
Taille : 160,8 Ko

    On peut voir d'ailleurs que la propriété description est éditable, ici un simple champ texte puisque c'est juste une String. Évidement je n'ai aucune idée de comment pouvoir ajouter un éditeur pour une propriété plus complexe (faudra peut-être contacter Gluon pour savoir si c'est possible de rajouter des éditeurs de propriétés dans SceneBuidler.

    Si tu veux mettre plus tard à jour le JAR de ton contrôle (tu as ajouté des propriétés ou modifié l'aspect), clique sur le petit engrenage tout à droite de Library puis va sur Custom Library Folder -> Reveal in Explorer. Cela te montrera où le JAR est stocké et comme ça tu pourras le remplacer par une nouvelle version.
    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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut
    Je vous remercie pour votre retour rapide, cela résout parfaitement mon problème!

    Merci beaucoup et bonne soirée!

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Ah vi j’oubliais, si tu veux vraiment faire un champs de saisie qui ne prend que des chiffres, il te faut placer un TextFormatter sur le TextField.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final UnaryOperator<TextFormatter.Change> integerOnlyKeyboardInput = change -> change.getText().matches("[0-9]*") ? change : null;
    final StringConverter<Integer> integerValueConverter = new IntegerStringConverter();
    final TextFormatter<Integer> integerOnlyFormatter = new TextFormatter<>(integerValueConverter, 0, integerOnlyKeyboardInput);        
    integerOnlyFormatter.valueProperty().addListener((observable, oldValue, newValue) -> System.out.printf("%s -> %s%n", oldValue, newValue));
    final TextField textField = new TextField();
    textField.setTextFormatter(integerOnlyFormatter);
    Ce que bien sur tu peux faire dans ton composant perso.
    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

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

Discussions similaires

  1. importer une classe java dans une page jsp
    Par chafik_si3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/03/2009, 15h51
  2. importer une class java dans page jsp
    Par Nemesys dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 29/03/2007, 22h37
  3. reconnaissance d'une class java dans 1 jsp
    Par launas dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 24/08/2006, 17h39
  4. Appel d'une methode java dans un fichier jsp
    Par kodo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/05/2006, 13h46
  5. Réponses: 1
    Dernier message: 27/04/2006, 18h22

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