2017-01-03 79 views
1

我創建了一個小型文本編輯器窗口,允許用戶更改屏幕中包含的文本區域的一些基本屬性。可用於更改textArea屬性的兩個選項是字體顏色和字體顏色填充,它們都由單獨的顏色拾取器處理。JavaFX更改CSS樣式表中的單一樣式

我在使用setStyle方法測試這些按鈕時遇到了問題,一次只能保存一個屬性。例如,如果文本顏色設置爲藍色,之後填充顏色設置爲黃色,則文本顏色不會保持藍色,而是恢復爲其在樣式表中定義的默認值(黑色)。

要解決此問題,我創建了以下方法;

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

的toRgbString()方法也被稱爲,這是通過簡單地從顏色選擇器,用戶輸入到一個字符串,使得使用setStyle方法可以傳遞正確的參數的樣式表。

該解決方案確實有效,因爲它使我可以更改填充和字體顏色,而無需在選擇時恢復默認設置。但是,我的程序不僅僅包含填充和字體顏色,這些選項會添加更長的setStyle語句。

TLDR:有沒有辦法編輯包含在CSS樣式表中的單一樣式而不會影響給定類中的其他樣式?

回答

0

關於第一個問題(較長的setStyle聲明),如果我們考慮到的樣式由String定義的,它需要一整套的細節,以提供單一的風格,所以爲什麼不使用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); 

我不知道是否有更好的方法,但它的工作原理,祝你好運!

編輯:

我覺得這個提示回答你的第二個問題:

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 

} 

我希望這將幫助您解決問題!

+0

有意思的工作,你的方法很好地處理了連接,但仍然不允許單行在CSS工作表中生效。我不知道這將如何處理多個輸入,即字體顏色多次更改,因爲您創建的方法只是添加到列表數組,而不是更新樣式屬性的值 – dibiasem

+0

我已更新我的答案! –