JavaFX Root 边框与菜单边框相同
JavaFX Root border same as menu border
继续我的 GUI 开发,我遇到了另一个问题。我在 CSS 文件中为我的 .root
设置了线性渐变作为边框,但似乎 Menu
class 的元素以某种方式共享相同的属性,因为相同这些也应用了线性效果。
正如你所看到的,在 window 的底部是我告诉你的效果。看左边的菜单,效果也被应用到它上面,这是我不希望发生的事情。
这是我的 css 文件。根标记为 .root
,该菜单标记为 .context-menu
.root{//here
-fx-background-color: #2D2E32;
-fx-font-size: 12px;
-fx-background-insets: 0 0 0 0, 0, 4, 4;
-fx-border-color: linear-gradient(transparent, #32739B);
}
#file{
-fx-background-color: linear-gradient(#494C58, #3E3F43);
}
#file .label{
-fx-text-fill: #EAEAEA;
}
.context-menu{//and here
-fx-background-color: #3E3F43;
}
#closeButton, #minimizeButton, #maximizeButton{
-fx-background-radius: 0;
-fx-background-color: linear-gradient(#494C58, #3E3F43);
-fx-text-fill: #ffffff;
-fx-font-weight: bold;
-fx-background-insets: 0 0 0 0, 0, 1, 2;
}
#closeButton:hover{
-fx-background-color: #E46458;
}
#minimizeButton:hover{
-fx-background-color: #80B1E0;
}
#maximizeButton:hover{
-fx-background-color: #80E089;
}
.menu-item:hover, menu-item:focus{
-fx-background-color: #69757A;
}
.menu{
}
.menu:hover{
-fx-background-color: #69757A;
}
.label{
-fx-text-fill: #ffffff;
}
.button{
-fx-background-radius: 0;
}
#submit{
-fx-background-color: #3F494D;
-fx-background-insets: 0 0 0 0, 0, 4, 4;
-fx-text-fill: #fff;
-fx-font-weight: bold;
-fx-border-color: #32739B;
}
#submit:hover{
-fx-background-color: #32739B;
}
.text-field{
-fx-background-radius: 0;
}
#forgot{
-fx-background-color: transparent;
-fx-text-fill: #818181;
}
.separator{
-fx-background-color: #363636;
-fx-background-insets: 0,1,2,0;
}
问题出在样式 class root
:
The .root style class is applied to the root node of the Scene
instance. Because all nodes in the scene graph are a descendant of the
root node, styles in the .root style class can be applied to any node.
因此,如果您在此 class 中定义边框颜色,它将被任何 Node
.
继承
您可以使用不同的名称创建一个新的 CSS class
.rootelement {
-fx-border-color: linear-gradient(transparent, #32739B);
-fx-border-width: 2;
}
并将布局的根元素设置为具有此样式-class
BorderPane layout = new BorderPane();
layout.setTop(hBox);
layout.getStyleClass().add("rootelement");
然后您可以从 root
class.
中删除 -fx-border-color
属性
这样可以防止任何其他控件继承边框。
继续我的 GUI 开发,我遇到了另一个问题。我在 CSS 文件中为我的 .root
设置了线性渐变作为边框,但似乎 Menu
class 的元素以某种方式共享相同的属性,因为相同这些也应用了线性效果。
正如你所看到的,在 window 的底部是我告诉你的效果。看左边的菜单,效果也被应用到它上面,这是我不希望发生的事情。
这是我的 css 文件。根标记为 .root
,该菜单标记为 .context-menu
.root{//here
-fx-background-color: #2D2E32;
-fx-font-size: 12px;
-fx-background-insets: 0 0 0 0, 0, 4, 4;
-fx-border-color: linear-gradient(transparent, #32739B);
}
#file{
-fx-background-color: linear-gradient(#494C58, #3E3F43);
}
#file .label{
-fx-text-fill: #EAEAEA;
}
.context-menu{//and here
-fx-background-color: #3E3F43;
}
#closeButton, #minimizeButton, #maximizeButton{
-fx-background-radius: 0;
-fx-background-color: linear-gradient(#494C58, #3E3F43);
-fx-text-fill: #ffffff;
-fx-font-weight: bold;
-fx-background-insets: 0 0 0 0, 0, 1, 2;
}
#closeButton:hover{
-fx-background-color: #E46458;
}
#minimizeButton:hover{
-fx-background-color: #80B1E0;
}
#maximizeButton:hover{
-fx-background-color: #80E089;
}
.menu-item:hover, menu-item:focus{
-fx-background-color: #69757A;
}
.menu{
}
.menu:hover{
-fx-background-color: #69757A;
}
.label{
-fx-text-fill: #ffffff;
}
.button{
-fx-background-radius: 0;
}
#submit{
-fx-background-color: #3F494D;
-fx-background-insets: 0 0 0 0, 0, 4, 4;
-fx-text-fill: #fff;
-fx-font-weight: bold;
-fx-border-color: #32739B;
}
#submit:hover{
-fx-background-color: #32739B;
}
.text-field{
-fx-background-radius: 0;
}
#forgot{
-fx-background-color: transparent;
-fx-text-fill: #818181;
}
.separator{
-fx-background-color: #363636;
-fx-background-insets: 0,1,2,0;
}
问题出在样式 class root
:
The .root style class is applied to the root node of the Scene instance. Because all nodes in the scene graph are a descendant of the root node, styles in the .root style class can be applied to any node.
因此,如果您在此 class 中定义边框颜色,它将被任何 Node
.
您可以使用不同的名称创建一个新的 CSS class
.rootelement {
-fx-border-color: linear-gradient(transparent, #32739B);
-fx-border-width: 2;
}
并将布局的根元素设置为具有此样式-class
BorderPane layout = new BorderPane();
layout.setTop(hBox);
layout.getStyleClass().add("rootelement");
然后您可以从 root
class.
-fx-border-color
属性
这样可以防止任何其他控件继承边框。