JavaFX在CSS样式表中更改单一样式

时间:2017-01-03 15:34:34

标签: css javafx colors stylesheet

我创建了一个小文本编辑器窗口,允许用户更改屏幕中包含的文本区域的一些基本属性。可用于更改textArea属性的两个选项是字体颜色和字体颜色填充,它们都由单独的颜色选择器处理。

我在使用setStyle方法测试这些按钮时遇到了一个问题,一次只能保存一个属性。例如,如果文本颜色设置为BLUE,然后填充颜色设置为黄色,则文本颜色不会保持蓝色,而是恢复为样式表中定义的默认值(黑色)。

要解决此问题,我创建了以下方法;

  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样式表中包含的单一样式而不影响给定类中的其他样式?

1 个答案:

答案 0 :(得分: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

}

我希望这能帮助您解决问题!