【问题标题】:JavaFX change single style in CSS stylesheetJavaFX 更改 CSS 样式表中的单一样式
【发布时间】:2017-05-17 18:00:11
【问题描述】:

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

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

【问题讨论】:

    标签: css javafx colors stylesheet


    【解决方案1】:

    对于您的第一个问题(更长的 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
    
    }
    

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

    【讨论】:

    • 有趣的解决方法,您的方法很好地处理了连接,但仍然不允许在 CSS 表中影响单行。我不确定这将如何处理多个输入,即字体颜色多次更改,因为您创建的方法只是添加到列表数组而不是更新样式属性的值
    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多