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 :

propriété font dans un composant custom visible dans scenebuilder


Sujet :

JavaFX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Par défaut propriété font dans un composant custom visible dans scenebuilder
    Bonjour,

    créer un composant custom, en faire un jar et l'ajouter dans les librairies de scenebuilder pour qu'il soit visible=>OK
    déclarer des propriétés string/float/integer/ object<Paint> etc pour qu'elles soient visibles dans scenebuilder=> Ok

    Par contre je n'arrive pas à déclarer une propriété "Font" et qu'elle soit visible dans les propriétés custom de scenebuilder?

    pourtant je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     private SimpleObjectProperty<Font> TextFont = new SimpleObjectProperty<>(Font.font("System",FontWeight.NORMAL,12));
     
     public Font getTextFont() {
            return TextFont.get();
        }
     
        public SimpleObjectProperty<Font> textFontProperty() {
            return TextFont;
        }
     
        public void setTextFont(Font textFont) {
            this.TextFont.set(textFont);
               }
    mes autres propriétés apparaissent mais pas celle ci.

    où est ce que je peux trouver de la doc qui explique comment faire? j'ai fouillé un peu partout, des fois je tombe sur du CssMetaData mais là je maitrise pas, j'aimerais trouver de la doc la-dessus ou un tuto

    merci
    a+

  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
    C'est un problème dans SceneBuilder lui-même qui doit hardcoder l'affichage/édition de certaines propriétés.

    Pour 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
    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
    package test;
     
    import javafx.beans.property.IntegerProperty;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.SimpleIntegerProperty;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.scene.layout.Pane;
    import javafx.scene.paint.Color;
    import javafx.scene.text.Font;
     
    public class MyControl extends Pane {
     
        public MyControl() {
            setMinSize(75, 25);
        }
     
        private final ObjectProperty<Font> font = new SimpleObjectProperty<>(this, "font");
     
        public final Font getFont() {
            return font.get();
        }
     
        public final void setFont(final Font value) {
            font.set(value);
        }
     
        public final ObjectProperty<Font> fontProperty() {
            return font;
        }
     
        private final ObjectProperty<Color> color = new SimpleObjectProperty<>(this, "color");
     
        public final Color getColor() {
            return color.get();
        }
     
        public final void setColor(final Color value) {
            color.set(value);
        }
     
        public final ObjectProperty<Color> colorProperty() {
            return color;
        }
     
        private final IntegerProperty count = new SimpleIntegerProperty(this, "count");
     
        public final int getCount() {
            return count.get();
        }
     
        public final void setCount(final int value) {
            count.set(value);
        }
     
        public final IntegerProperty countProperty() {
            return count;
        }
    }
    Et le FXML suivant :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.text.*?>
    <?import test.*?>
     
    <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
        <MyControl fx:id="myControl" color="red" count="10">
            <font><Font name="Arial Black" size="24.0" /></font>
        </MyControl>
    </AnchorPane>

    SceneBuilder (dernier binaire dispo sur le site) va seulement afficher les propriété count (éditable) et color (non éditable) et ne pas afficher la propriété font.

    A partir de là pas 36 solutions :
    • Aller lire le code source dans le bitbucket de Gluon (qui contient la version la plus récente) tenter de rajouter un support en s'inspirant de ce qui fonctionne déjà pour les nœud et contrôles disposant d'une propriété font. Puis éventuellement soumettre le patch à Gluon pour intégration future.
    • Ou alors contacter Gluon pour qu'il fassent la modif mais leur priorité est aux clients payants donc les clients gratuit doivent se contenter des deux mises à jour annuelles et du support via StackOverflow.
    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
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Par défaut
    ok merci.

    Pour "Color" on met "Paint" à la place et là je peux éditer la couleur, petite feinte trouver sur stackoverflow du coup je me disais que pour Font il y avait peut être une ruse du même type...
    Justement en regardant des composant qui ont font editable, ils passent par des cssmetadata mais je sais pas les utiliser.

    Bon tant pis pour l'instant j'utiliserai ma propriété font "à l'aveugle" sans scenebuilder.

    merci

  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
    Pas mieux :

    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
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    package test;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import javafx.beans.property.IntegerProperty;
    import javafx.beans.property.ObjectProperty;
    import javafx.css.CssMetaData;
    import javafx.css.SimpleStyleableIntegerProperty;
    import javafx.css.SimpleStyleableObjectProperty;
    import javafx.css.StyleConverter;
    import javafx.css.Styleable;
    import javafx.css.StyleableProperty;
    import javafx.scene.control.Control;
    import javafx.scene.layout.Pane;
    import javafx.scene.paint.Color;
    import javafx.scene.text.Font;
     
    public class MyControl extends Pane {
     
        public MyControl() {
            setMinSize(75, 25);
        }
     
        private static final CssMetaData FONT_META_DATA = new CssMetaData<MyControl, Font>("-fx-font", StyleConverter.getFontConverter()) {
            @Override
            public boolean isSettable(final MyControl styleable) {
                return !styleable.fontProperty().isBound();
            }
     
            @Override
            public StyleableProperty<Font> getStyleableProperty(MyControl styleable) {
                return (StyleableProperty<Font>) styleable.fontProperty();
            }
        };
        private static final CssMetaData COLOR_META_DATA = new CssMetaData<MyControl, Color>("-fx-color", StyleConverter.getColorConverter()) {
            @Override
            public boolean isSettable(final MyControl styleable) {
                return !styleable.colorProperty().isBound();
            }
     
            @Override
            public StyleableProperty<Color> getStyleableProperty(MyControl styleable) {
                return (StyleableProperty<Color>) styleable.colorProperty();
            }
        };
        private static final CssMetaData COUNT_META_DATA = new CssMetaData<MyControl, Number>("-fx-count", StyleConverter.getSizeConverter()) {
            @Override
            public boolean isSettable(final MyControl styleable) {
                return !styleable.countProperty().isBound();
            }
     
            @Override
            public StyleableProperty<Number> getStyleableProperty(MyControl styleable) {
                return (StyleableProperty<Number>) styleable.countProperty();
            }
        };
     
        private static final List<CssMetaData<? extends Styleable, ?>> CSS_META_DATA_LIST;
     
        static {
            final List<CssMetaData<? extends Styleable, ?>> temp = new ArrayList<>(Control.getClassCssMetaData());
            temp.add(FONT_META_DATA);
            temp.add(COLOR_META_DATA);
            temp.add(COUNT_META_DATA);
            CSS_META_DATA_LIST = Collections.unmodifiableList(temp);
        }
     
        public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
            return CSS_META_DATA_LIST;
        }
     
        @Override
        public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
            return getClassCssMetaData();
        }
     
        private final ObjectProperty<Font> font = new SimpleStyleableObjectProperty<>(FONT_META_DATA, this, "font", Font.getDefault());
     
        public final Font getFont() {
            return font.get();
        }
     
        public final void setFont(final Font value) {
            font.set(value);
        }
     
        public final ObjectProperty<Font> fontProperty() {
            return font;
        }
     
        private final ObjectProperty<Color> color = new SimpleStyleableObjectProperty<>(COLOR_META_DATA, this, "color");
     
        public final Color getColor() {
            return color.get();
        }
     
        public final void setColor(final Color value) {
            color.set(value);
        }
     
        public final ObjectProperty<Color> colorProperty() {
            return color;
        }
     
        private final IntegerProperty count = new SimpleStyleableIntegerProperty(COUNT_META_DATA, this, "count");
     
        public final int getCount() {
            return count.get();
        }
     
        public final void setCount(final int value) {
            count.set(value);
        }
     
        public final IntegerProperty countProperty() {
            return count;
        }
    }
    En fait ça change rien par rapport a la version d'avant (a part bien sur le fait que désormais je peux utiliser une feuille de style externe).
    Et je confirme que la doc est toujours aussi faible de ce cote-la (les propriétés stylable) qu'il y a 3 ans.

    Désormais comme il ne faut plus rien attendre d'Oracle, il faut se tourner vers Gluon tant pour les fixes, la doc que les ajouts dans SceneBuilder (vu que l'OpenJFX ne gérera pas le logiciel).
    Donc a part contacter Gluon pour au moins signaler le soucis ou demander de l'aide via StackOverflow (ils répondent quand même donc faut pas hésiter ; juste que moi j'appelle pas qqun qui te downvote du "support professionnel"........................) je ne vois pas trop.
    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
    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
    Note : on est sensé pouvoir aussi remplacer le début par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private static final CssMetaData FONT_META_DATA = new FontCssMetaData<MyControl>("-fx-font", Font.getDefault()) {
            @Override
            public boolean isSettable(final MyControl styleable) {
                return !styleable.fontProperty().isBound();
            }
     
            @Override
            public StyleableProperty<Font> getStyleableProperty(MyControl styleable) {
                return (StyleableProperty<Font>) styleable.fontProperty();
            }
        };
    Ça permet d'utiliser des sélecteurs individuels en substitution de "-fx-font" pour les sous-elements de la police ("-fx-font-weight", etc.). Et non ça ne règle pas le soucis.

    Par contre si même si tu ne peux pas éditer directement la police dans SceneBuilder tu peux le faire dans le CSS, donc tu peux attacher une feuille de style temporaire (Preview -> Scene Style Sheets -> Add a Style Sheet...) et voir ce que donne la police en editant a mano cette feuille de style.
    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

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Par défaut
    pour info il y a un ticket sur le bitbucket de scenebuilder à ce sujet
    https://bitbucket.org/gluon-oss/scen...-inspector-for

    en attendant qu'une nouvelle version de scenebuilder sorte il faut faire sans.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/05/2010, 08h44
  2. Réponses: 2
    Dernier message: 21/02/2010, 23h15
  3. champs cachés (dans le code), mais visibles(dans la page) : quelle techno ?
    Par knice dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 18/08/2008, 17h01
  4. Réponses: 3
    Dernier message: 12/02/2007, 03h14
  5. Composants non visible dans certaines applications
    Par chtom dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/03/2006, 17h33

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