【问题标题】:JavaFX: Change CSS PseudoClass on Key EventJavaFX:在关键事件上更改 CSS PseudoClass
【发布时间】:2016-12-31 23:40:28
【问题描述】:

我有一个按钮,当它被点击时会改变它的设计。 (每个 CSS)简单。

但我也想启用如果你按下 ENTER 也应该按下它的功能。这行得通,但我有一个伪类,它将按钮的大小设置为 90% (.button:pressed)。

问题:按回车键不起作用。点击工作正常。 KeyTyped 有 css 伪类吗?

CSS:

.button{
        -fx-background-image: url("../resources/Game/cookie.png");
        -fx-background-color: transparent;
}

.button:pressed{
    -fx-background-size: 90%;
    -fx-background-position: center;
}

提前谢谢你:)

【问题讨论】:

    标签: css button javafx scenebuilder


    【解决方案1】:

    您可以在 Enter 按下时显式添加伪类“pressed”,然后在松开时将其删除。

    button.setOnKeyPressed(e -> {
       if (e.getCode() == KeyCode.ENTER) {
          button.pseudoClassStateChanged(PseudoClass.getPseudoClass("pressed"), true);
       }
    });
    
    button.setOnKeyReleased(e -> {
       if (e.getCode() == KeyCode.ENTER) {
          button.pseudoClassStateChanged(PseudoClass.getPseudoClass("pressed"), false);
       }
    });
    

    MCVE

    import javafx.application.Application;
    import javafx.css.PseudoClass;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.input.KeyCode;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    public class Test extends Application {
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            Button button = new Button("Change Color");
            button.setOnKeyPressed(e -> {
                if (e.getCode() == KeyCode.ENTER) {
                    button.pseudoClassStateChanged(PseudoClass.getPseudoClass("pressed"), true);
                }
            });
    
            button.setOnKeyReleased(e -> {
                if (e.getCode() == KeyCode.ENTER) {
                    button.pseudoClassStateChanged(PseudoClass.getPseudoClass("pressed"), false);
                }
            });
            StackPane stackPane = new StackPane(button);
            Scene scene = new Scene(stackPane, 200, 200);
            scene.getStylesheets().add(getClass().getResource("test.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            Application.launch();
        }
    }
    

    test.css

    .button:pressed{
        -fx-background-color: red;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2013-08-12
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多