基于MenuItem的标签JavaFX上的CSS样式
我在找工作上遇到了一些问题。因此,我有一个自定义上下文菜单验证错误上下文和相应的css:基于MenuItem的标签JavaFX上的CSS样式,java,css,javafx,menuitem,Java,Css,Javafx,Menuitem,我在找工作上遇到了一些问题。因此,我有一个自定义上下文菜单验证错误上下文和相应的css: #validation-error-context { -fx-background-color: #ffbbbb; -fx-border-color: #f00; } 在此上下文中,我还希望设置MenuItems的样式,以便对其应用以下css: #error-menu-item { -fx-background-color: #ffbbbb; } .error-men
#validation-error-context
{
-fx-background-color: #ffbbbb;
-fx-border-color: #f00;
}
在此上下文中,我还希望设置MenuItems的样式,以便对其应用以下css:
#error-menu-item
{
-fx-background-color: #ffbbbb;
}
.error-menu-item:focused
{
-fx-background-color: #ffbbbb;
-fx-text-fill: red;
}
确保所有工作按计划进行,并且项目和上下文具有红色背景和边框。现在的问题是,当我想在菜单项的聚焦状态上设置文本填充颜色时,通常会通过以下方式进行:
.menu-item:focused .label
{
-fx-text-fill: red;
}
然而,这显然会将该样式应用于项目中的所有菜单项,这不是我想要的,并且使用下面的语句对我正在使用的实例不起作用
.error-menu-item:focused .label
{
-fx-text-fill: red;
}
有没有办法通过css或代码设置聚焦标签的文本填充属性?我甚至不确定这是否可能,但任何指向正确方向的指针都将非常受欢迎。只要将错误设置为css类而不是ID:(#) 查看代码中的最小可编译示例: MenuController.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
public class MenuController implements Initializable {
@FXML private MenuButton OkMenu;
@FXML private MenuItem foo1;
@FXML private MenuItem bar2;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
//Define foo1 and bar 2 as errors:
foo1.getStyleClass().add("error-menu-item");
bar2.getStyleClass().add("error-menu-item");
}
}
Main.java
.干杯,很好用-我用setId设置css,而不是getStyleClass().add()!这两个函数行为不同的原因是什么?很抱歉提出了所有的问题,但是有没有办法让一个类具有多个样式状态?例如,一个文本字段可以有一个正常的css状态,然后是一个错误的css状态,该状态将设置焦点突出显示?首先,如果您
setId
,您可能只有一个类具有该样式,因为Id应该是特定的(另外是fx:id尝试在上面的代码中的CSS中添加一个#foo2
,你会理解的。此外,类更通用,因此你可以有一个子类。例如。错误菜单项:聚焦
,而对于id,你不能。第二个注释:创建一个侦听器,在发生此类更改时交换CSS类。(如果您还有更多问题,请提出另一个问题。请勿在评论中扩展此问题。
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("menu.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
stage.setScene(scene);
stage.setTitle("Menu");
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}