有两种方法可以在我的UI节点(标签,按钮等)设置属性
我可以用这样的:
Button b = new Button("Sample");
b.setTextFill( Paint.valueOf("red") );
b.setTextAlignment( TextAlignment.CENTER );
或者,我可以做等同的东西:
Button b = new Button("Sample");
b.setStyle("-fx-text-alignment: center; -fx-text-fill: red");
我不知道,则优选的任何原因(除个人喜好等),这些方法中的一种?
这个问题的答案也回落到个人的口味一点点,但也有我认为是有用的经验有些东西在一般规则。
在JavaFX的造型四个选项是:
- CSS样式表。
- CSS的setStyle命令从代码中发出。
- 对于造型Java代码。
- FXML属性的造型。
我的建议是:
- 使用CSS样式表为您几乎所有的造型。
- 使用您拥有数千个节点或你个人比较喜欢的类型安全和方便的调试功能的API提供了一些Java API调用。
- 只有当你需要动态改变只能使用CSS来设定的, 无法使用API或样式表来设置的样式使用的setStyle。
- 不要通过FXML适用的造型。
使用CSS样式表为造型的优点是:
- 您可以从代码中分离出来的风格。
- 您可以轻松地定义多个样式表和进出改变他们在运行时获得不同的外观给你的应用程序。
- 您正在使用专为造型设计的语言的。
- 您可以在设计工具,如应用样式表SceneBuilder 。
你真的需要使用CSS样式表来获取最大的收益 - 真的,如果你使用的是可视化设计工具的最后一点是至关重要的。 如果你的代码,而不是在CSS样式表应用样式,那么你不会真的能够以可视化的应用程序的外观,当你试图在可视化设计工具来设计它像。 如果通过FXML属性应用样式,那么你的FXML变得很困难,因为它是那么定义应用程序的结构和布局,以及它的风格 - 与一般最好是单独的这些问题。
我在我的代码有时使用的setStyle调用,但大多是仅仅因为懒惰,而不是因为它是做它的推荐方式。
需要动态改变使用的setStyle的风格应该是非常有限的情况下。 例如,用JavaFX 2.2,你不能设置通过API的区域的背景颜色。 您可以使用一个styleClass设置。 但是,如果你想动态设置背景颜色给用户选择的颜色,那么你可能会使用的setStyle方法这样button.setStyle("-fx-text-fill: " + userColor.toString() + ";");
。 所以,真的很漂亮的专业。
还要注意的是,在JavaFX的8,有些只能用JavaFX 2.2 CSS来实现(如设置区域背景)的东西将能够在代码通过Java API来完成。 对于上面,设置用户填充颜色的区域的背景使用Java API此,如果正在使用的JavaFX 8将是优选的方法所给出的例子。
在各使用情况的性能影响方面。 我的理解(从在论坛JavaFX的CSS实现维护者评论)在大多数情况下是性能顺序从最高效的,以至少高性能将类似如下:
- 直接API调用。
- 通过FXML风格。
- 通过施加的styleClass风格。
- 的setStyle调用。
注意,在JavaFX的是CSS应用程序的设计是相当有效率,所以在很多情况下表现不是主要的考虑因素。 我的猜测是,只有当你有数千个节点被风格化会有使用CSS的主要性能的影响,虽然我没有确凿的数据来支持该猜测了。
在过去,我已经看到JavaFX的程序员,他们希望不使用CSS和喜欢使用一个JavaFX API为造型的应用程序的一些意见。 给出的理由是一样的东西更容易调试,一切都在一个单一的语言,对方法的名称,编辑和编译时静态类型检查,等等。如果这是你的喜好使用Java API的风格,而不是CSS的IDE援助更好地整合对于在自己的代码这些原因,这是好的,只要它去。 但是,你根本就无法完成所有需要,只使用Java API的造型。
如何在JavaFX的使用CSS和知识的用途是作为精通JavaFX技术的关键。 造成这种情况的主要原因是,在JavaFX的所有核心控制由CSS样式。 即使是最微不足道的JavaFX应用程序通常利用这些控件,如果你希望能够定制自己的样子,你将需要了解的CSS(即使它只是读取标准JavaFX的CSS样式表,让你知道如何标准控件样式)。 而且,当涉及到自定义的标准控件,它通常会更容易应用CSS自定义样式表。
我想这是可以讨论的,但在我看来是要回去看看你希望实现的目标。 如果你在改变你的风格规划,在外部定义时,那将是非常干净的CSS
文件。 然后,如果你改变你的风格的道路(或允许用户更改自己的风格),它会在一个地方进行更改。
Button b = new Button("Sample");
b.setStyleClass("myClass");
JavaFX
有伟大工程MVC
的方法。 造型会确定落入视图。 把一切都在一个地方。 为什么不把它吗?
另外,是什么让你的代码看起来更干净? 更容易阅读? 这将是多么容易被维护,由您或其他人的道路?
文章来源: In JavaFX, should I use CSS or setter methods to change properties on my UI Nodes? [closed]