JavaFX changer le style unique dans la feuille de style CSS


J'ai créé une petite fenêtre d'éditeur de texte qui permet à l'utilisateur de modifier certaines propriétés de base d'une zone de texte incluse dans l'écran. Deux des options disponibles pour modifier les propriétés de la zone de texte sont la couleur de la police et le remplissage de la couleur de la police, qui sont tous deux gérés par des sélecteurs de couleurs distincts.

J'ai rencontré un problème lors du test de ces boutons à l'aide de la méthode setStyle selon lequel une seule propriété pouvait être enregistrée à la fois. Exemple, si la couleur du texte a été définie sur BLEU, puis remplir la couleur a été définie sur JAUNE, la couleur du texte ne resterait pas bleue, mais reviendrait à sa valeur par défaut définie dans la feuille de style (noir).

Pour résoudre ce problème, j'ai créé la méthode suivante;

  private void updateTheSyle()
    {
        this.textArea.setStyle("-fx-control-inner-background: " + toRgbString(this.colorPickerFill.getValue()) +
                "; -fx-text-fill: " + toRgbString(this.colorPickerFont.getValue()) + ";");
    }

La méthode toRgbString() est également appelée, c'est simplement passer l'entrée utilisateur du sélecteur de couleurs dans une chaîne de telle sorte que la méthode setStyle puisse transmettre les paramètres corrects à la feuille de style.

Cette solution fonctionne, car elle me permet de changer à la fois le remplissage et la couleur de la police, sans revenir à la valeur par défaut lors de la sélection. Cependant, mon programme comprend plus que la couleur de remplissage et de police, ce qui contribuera à une déclaration setStyle beaucoup plus longue à mesure que ces options sont ajoutées.

TLDR : Existe-t-il un moyen de modifier un seul style inclus dans une feuille de style CSS sans affecter les autres styles d'une classe donnée?

Author: ItachiUchiha, 2017-01-03

1 answers

Pour votre première question (instruction setStyle plus longue ), Si nous prenons en compte que le style est défini par un String, et qu'il faut tout un ensemble de détails pour fournir un seul style, alors pourquoi ne pas utiliser un List<String>:

List<String> example = new ArrayList<>();
String style = "";

//For example if you use 2 textField to get the (value) and (type):
example.add("-fx-"+textFieldType+":"+textFieldValue + "; ");

//To gather all the properties in a single string
for(String property: example){

   style += example;
}

yourNode.setStyle(style);

Je ne sais pas s'il y a une meilleure approche mais ça marche, bonne chance !

Modifier:

Je pense que cette astuce répond à votre deuxième question:

private void Update(String type,String newValue){

    for(int i = 0; i < example.size(); i++){

        if(example.get(i).contains(type)){

            example.set(i, "-fx-"+type+":"+newValue + "; ");
            //Here you add a (break;) to not alter the other similar styles !
        }

    }   

   //Here you use a loop to update the new elements changed

}

J'espère que cela vous aidera à résoudre votre problème !

 0
Author: Bo Halim, 2017-01-03 18:13:16