2014-10-19 51 views
2

JavaFX GridPane,VBox,HBox是否有预定义的CSS类? 我找不到CSS reference中的任何东西,但它似乎很奇怪,默认组件没有定义。用于GridPane,VBox,VBox的JavaFX CSS类

如果没有一个预先定义的类,有没有更好的办法,而不是手动添加类上的所有网格:

GridPane pane = new GridPane(); 
pane.getStyleClass().add("grid-pane"); 
+0

是的,有一种方法。只要看看这个[问题](http://stackoverflow.com/questions/35290665/javafx-style-all-nodes-of-the-same-type-e-g-vbox/35291537#35291537)。 – Amin 2016-04-28 09:20:48

回答

3

没有,只有Control子类都默认CSS类定义。我认为这是因为想要管理自己的图形的应用程序(例如使用Canvas或非托管Shapes)可能不会使用css,但仍可能会使用这些布局窗格。由于应用于场景图形的css代价昂贵,因此不一定要求它们的节点不具有样式类别。

我不认为有什么方法可以将样式类添加到窗格中,而不像显示的那样。显然,如果你需要大量的GridPane s的相同样式类,你可以定义一个方法,以避免重复代码:

private GridPane createGridPane() { 
    GridPane grid = new GridPane(); 
    grid.getStyleClass().add("grid-pane"); 
    return grid ; 
} 

更新

需要注意的是,如基于HTML CSS,您可以使用基于类型的选择器以及基于样式类的选择器,如documentation中所述。任何节点的默认样式类都是其简单的类名称。这样,就可以通过类型选择选择网格窗格:

GridPane { 
    /* styles ... */ 
} 

这感觉有点脆弱的对我说:特别是如果你继承GridPane,选择将不再适用,这是一种对象 - 非常反直觉面向视角。我会建议在类型选择器上使用样式类。

另请注意,如果您想要更改整个应用程序的颜色方案(或者仅仅是场景图的子图),可能是最常见的用例,您可以简单地为一些标准的查找颜色。例如:

.root { 
    -fx-base: #bfe7ff; 
    -fx-accent: #0096c9 ; 
    -fx-default-button: #abd8ed ; 
    -fx-focus-color: #039ed3; 
    -fx-faint-focus-color: #039ed322; 
    -fx-focused-text-base-color : ladder(
      -fx-selection-bar, 
      -fx-light-text-color 45%, 
      -fx-dark-text-color 46%, 
      -fx-dark-text-color 59%, 
      -fx-mid-text-color 60% 
     ); 
    -fx-focused-mark-color : -fx-focused-text-base-color ; 

    -fx-font-family: verdana; 
} 

将采用“蓝色主题”整个应用程序,传播查到的颜色和属性默认为“继承”的所有子节点。

+0

谢谢。任何想法应用CSS多昂贵?你能推荐一些阅读材料吗? :) – 2014-10-20 16:07:45

+1

不,我不知道应用CSS是多么昂贵;有趣的是CSS开发者似乎对性能非常关注。我只是在OTN上记住[此讨论](https://community.oracle.com/thread/3570580)。请注意,如果您使用的是控件(按钮,标签等),那么无论如何都必须完成CSS传球。 – 2014-10-20 16:14:30

+0

有趣。感谢你! – 2014-10-20 16:15:35