2017-06-12 22 views
0

的最簡單的方法(如文本字段,文本區域,那些在組合框:編輯,DatePicker的,等...)JavaFX的 - 我想設置插入符顏色<strong>所有</strong> JavaFX的文本輸入改變插入顏色

我發現這個Stackoverflow的回答:How to change the caret color in JavaFX 2.0?

...和一個例子GitHub

第一個確實改變文字不好的脫字符顏色。第二個擴展TextFieldSkin類,這已經更好了,但是我怎樣才能在CSS中使用它?

任何幫助表示讚賞。

更新1:

我發現JavaFX的以下CSS樣式屬性控制:-fx-skin

這在理論上允許我設置一個自定義皮膚類(-fx-skin: "package.MySkin";),但是,皮膚類只是不使用!

類如下所示:

package gui; 
… 
public class MyTextFieldSkin extends TextFieldSkin 
{ 
    public MyTextFieldSkin(TextField tf) { 
     super(tf); 
     System.out.println("MyTextFieldSkin constructor called!"); 
     ReadOnlyObjectWrapper<Color> farbe = new ReadOnlyObjectWrapper<>(Color.green); 
     caretPath.strokeProperty().bind(farbe); 
     caretPath.setStrokeWidth(1.5); 
    } 
} 

...和CSS設置這樣的:

.text-field { 
    -fx-skin: "gui.MyTextFieldSkin"; 
} 

我在做什麼錯?我查看了AquaFX的源代碼,他們的操作方式與我一樣!

回答

1

稍後重&錯誤後,我解決了以下列方式問題:我收集容器內的所有TextField S和控制,在他們有TextField S(像ComboBoxDatePicker等)

(由於TitledPaneScrollPane,SplitPaneTabPane,因爲他們沒有在getChildren()發佈他們的孩子,所以必須調用個別類的getContent()方法,並通過它掃描)。

之後,我把所有的TextField控制,我環繞在他們和下面的代碼改變了他們的Skin

public class MyTextFieldSkin extends TextFieldSkin { 
    public MyTextFieldSkin(TextField tf) 
    { 
     super(tf); 
     ReadOnlyObjectWrapper<Color> color = new ReadOnlyObjectWrapper<>(Color.RED); 
     caretPath.strokeProperty().bind(color);   
    } 
} 

然後我不得不打電話

textfield.setSkin(new MyTextFieldSkin(textfield)); 

,並僅此而已。

乾杯