2017-01-03 3 views
1

Ich habe ein kleines Texteditor-Fenster erstellt, mit dem der Benutzer einige grundlegende Eigenschaften eines Textbereichs innerhalb des Bildschirms ändern kann. Zwei der verfügbaren Optionen zum Ändern der Eigenschaften von textArea sind die Schriftfarbe und die Schriftfarbe, die beide von separaten Farbwählern bearbeitet werden.JavaFX Änderung einzelner Stil in CSS-Stylesheet

Beim Testen dieser Schaltflächen mit der Methode setStyle ist ein Problem aufgetreten, bei dem immer nur eine Eigenschaft gespeichert werden konnte. Beispiel: Wenn die Textfarbe auf BLAU gesetzt war und die Füllfarbe anschließend auf GELB gesetzt war, blieb die Textfarbe nicht blau, sondern wurde auf den im Stylesheet definierten Standardwert zurückgesetzt (schwarz).

Um dieses Problem zu beheben, habe ich die folgende Methode erstellt;

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

Die toRgbString() Methode auch genannt wird, dies einfach die Benutzereingabe von der Farbauswahl in eine Kette, so dass das setStyle Verfahren der korrekten Parameter zum Sheet passieren kann passiert.

Diese Lösung funktioniert, da es mir ermöglicht, sowohl die Füll- als auch die Schriftfarbe zu ändern, ohne bei der Auswahl auf den Standardwert zurückzusetzen. Allerdings enthält mein Programm mehr als nur Füll- und Schriftfarbe, was zu einer weitaus längeren setStyle-Anweisung beiträgt, wenn diese Optionen hinzugefügt werden.

TLDR: Gibt es eine Möglichkeit, einen einzelnen Stil in einem CSS-Stylesheet zu bearbeiten, ohne die anderen Stile in einer bestimmten Klasse zu beeinflussen?

Antwort

0

Für Ihre erste Frage (mehr setStyle Aussage), wenn wir berücksichtigen, dass der Stil durch ein String definiert ist, und es dauert eine ganze Reihe von Details für eine einzelne Art zu schaffen, also warum nicht ein verwenden 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); 

ich weiß nicht, ob es ein besserer Ansatz ist, aber es funktioniert, viel Glück!

Edit:

Ich denke, diese Spitze Ihre zweite Frage beantwortet:

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 

} 

mir diese Hoffnung werden Ihnen helfen, Ihr Problem zu lösen!

+0

Interessante Arbeit, Ihre Methode kümmert sich um die Verkettung schön, aber immer noch nicht für einzelne Zeilen in einem CSS-Blatt bewirkt werden. Ich bin nicht sicher, wie dies mehrere Eingaben behandelt, dh die Schriftfarbe wird mehr als einmal geändert, da die von Ihnen erstellte Methode einfach zu einem Listenfeld hinzugefügt wird, anstatt den Wert der Stileigenschaft – dibiasem

+0

zu aktualisieren ! –

Verwandte Themen