Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于MenuItem的标签JavaFX上的CSS样式_Java_Css_Javafx_Menuitem - Fatal编程技术网

基于MenuItem的标签JavaFX上的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

我在找工作上遇到了一些问题。因此,我有一个自定义上下文菜单验证错误上下文和相应的css:

#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);
    }
}