有两种方法可以在我的UI节点上设置属性(标签,按钮等)
我可以使用这样的东西:
Button b = new Button("Sample");
b.setTextFill( Paint.valueOf("red") );
b.setTextAlignment( TextAlignment.CENTER );
Run Code Online (Sandbox Code Playgroud)
或者我可以做同等的事情:
Button b = new Button("Sample");
b.setStyle("-fx-text-alignment: center; -fx-text-fill: red");
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这些方法中的一种是出于任何原因(个人品味除外)更可取吗?
jew*_*sea 18
对此的答案确实归结为个人品味,但我认为有一些一般的经验法则是有用的.
JavaFX中样式的四个选项是:
我的建议是:
使用css样式表进行样式设计的优点是:
实际上,如果您使用的是可视化设计工具,最后一点至关重要 - 您确实需要使用css样式表来充分利用它.如果您在代码中而不是在css样式表中应用样式,那么当您尝试在可视化设计工具中设计应用程序时,您将无法真实地看到应用程序的外观.如果你通过fxml属性应用样式,那么你的fxml变得难以处理,因为它定义了应用程序的结构和布局以及它的样式 - 通常最好将这些问题分开.
我有时会在代码中使用setStyle调用,但主要是因为懒惰而不是因为它是推荐的方法.
使用setStyle动态更改样式的需要应该是非常有限的情况.例如,在JavaFX 2.2中,您无法通过API设置区域的背景颜色.您可以使用styleclass设置它.但是如果你想动态地将背景颜色设置为用户选择的颜色,那么你可以使用像这样的setStyle方法button.setStyle("-fx-text-fill: " + userColor.toString() + ";");.所以,非常专业.
另请注意,在JavaFX 8中,只能通过css在JavaFX 2.2中完成的一些事情(例如设置区域背景)将能够通过Java API在代码中完成.对于上面给出的为区域背景设置用户填充颜色的示例,如果使用JavaFX 8,则使用Java API将是首选方法.
在各种使用案例的性能影响方面.在大多数情况下,我的理解(来自论坛中JavaFX css实现维护者的评论)是从大多数高性能到最低性能的性能顺序如下所示:
请注意,JavaFX中的css应用程序设计得非常高效,因此在许多情况下,性能不是主要考虑因素.我的猜测是,只有当您设置了数千个节点时,使用css会对性能产生重大影响,尽管我没有硬数据支持这种猜测.
在过去,我看到JavaFX程序员的一些注释,他们不想使用css,而是喜欢使用JavaFX API来设计他们的应用程序.给出的原因包括更容易调试,一种语言的所有内容,更好地与IDE集成以获得方法名称的帮助,编辑和编译时静态类型检查等.如果您喜欢使用Java API而不是css进行样式化出于这些原因,在你自己的代码中,这是好的.但是,您只能使用Java API无法完成所需的所有样式.
使用css以及如何在JavaFX中使用它的知识对于熟练掌握JavaFX技术至关重要.主要原因是JavaFX中的所有核心控件都是由css设计的.即使是最琐碎的JavaFX应用程序通常也会使用这些控件,如果您希望能够自定义它们的外观,那么您将需要了解css(即使它只是为了阅读标准的JavaFX css样式表,以便您知道如何标准控件的样式).当涉及到自定义标准控件时,通常会更容易应用css自定义样式表.
我想这可以争论,但在我看来,是回去看看你希望完成什么。如果您计划更改样式,那么在外部CSS文件中定义时会非常干净。然后,如果您以后更改样式(或允许用户更改其样式),它将在一处更改。
Button b = new Button("Sample");
b.setStyleClass("myClass");
Run Code Online (Sandbox Code Playgroud)
JavaFX配合一种方法效果很好MVC。造型肯定会成为人们关注的焦点。将所有内容放在一处。为什么不把它留在那里呢?
另外,是什么让你的代码看起来更干净?更容易阅读?您或其他人将来维护起来有多容易?
| 归档时间: |
|
| 查看次数: |
8419 次 |
| 最近记录: |