我可以通过编程方式修改CSS文件JavaFX的元素值(颜色)吗?
在我的JavaFX项目中,我允许用户设置整个应用程序使用的强调色。此强调色将存储在sqlite数据库中 初始化时,将读取数据库文件,并应用强调色。目前,通过对每个需要更改的元素调用.setStyle()方法,可以痛苦地完成这项工作。这种方法容易出错,难以维护。我正在添加所有需要对数组应用更改的元素并在其中循环,但每次添加新按钮等时,很容易忘记向数组添加元素。更不用说不同类型的元素需要应用不同的样式 目前我认为实现这一点的唯一方法是将整个CSS元素(包括重音颜色)存储为字符串,将字符串保存到文件系统上的.CSS文件中,然后加载外部CSS。但这种方法并不优雅 因此,我知道以下两种方法可以实现我的目标,但这两种方法都不理想我可以通过编程方式修改CSS文件JavaFX的元素值(颜色)吗?,java,css,javafx,Java,Css,Javafx,在我的JavaFX项目中,我允许用户设置整个应用程序使用的强调色。此强调色将存储在sqlite数据库中 初始化时,将读取数据库文件,并应用强调色。目前,通过对每个需要更改的元素调用.setStyle()方法,可以痛苦地完成这项工作。这种方法容易出错,难以维护。我正在添加所有需要对数组应用更改的元素并在其中循环,但每次添加新按钮等时,很容易忘记向数组添加元素。更不用说不同类型的元素需要应用不同的样式 目前我认为实现这一点的唯一方法是将整个CSS元素(包括重音颜色)存储为字符串,将字符串保存到文件系
primaryStage.getScene().getStylesheets().add(“-fx背景色:“+getAccentColor()+”;”)代码>
有什么想法吗?肯定有人以前提供过用户可配置的重音颜色
谢谢大家! 将所有节点存储在一个数组中并在其上循环是荒谬的。在链接问题中,接受的答案利用了反应式编程风格中的styleProperty
另一个解决方案是使用CSS类并交换样式表,正如您所提到的。这将是一种更具生成性的方法。您可以在应用程序设置中下载样式的DB数据,设置样式,该样式只定义特定CSS类的颜色,如果用户在运行时更改,则重新加载样式
由于在启动时仍要重写文件,因此可以使用Files.createTempFile()
。或者只有当用户决定更改时才更改它,这样您就可以保留该文件。我发现这是一个答案,它在不实现新类或覆盖URL处理程序或类似疯狂操作的情况下可以完美地工作
感谢@James\u D 这回答了你的问题吗?您也可以定义自己的查找颜色,然后通过调用setStyle(…)
@James\u D,您好,James,我对您在另一个线程中的答案感兴趣,但我真的不知道如何实现它。具体来说,我不理解主题工厂/节点部分。我有一个父对象,它是node的子类,但我没有直接的节点。请您帮助我理解如何实现和使用主题类好吗?@Hawk,基于这个问题,我认为它可能也回答了我的问题,但我不理解当我的项目使用SceneBuilder在FXML中构建时如何实现它。我看到James_D也在这个帖子中,希望你们中的一位能够帮助我调整答案,使之适合使用FXML。非常感谢您的帮助。仅在根节点上调用setStyle(“-fx base:“+getAccentColor()+”;”)
有什么不对?我同意这是荒谬的,因此提出了这个问题。当只有3个按钮时,情况并没有那么糟,但当我构建UI时,很明显,它不可维护,并且没有很好地规划。