gpt4 book ai didi

css - javafx 2 和 css 伪类 : setting hover attributes in setStyle method

转载 作者:技术小花猫 更新时间:2023-10-29 10:21:49 25 4
gpt4 key购买 nike

我有一个带有这段代码的简单场景:

scene.getStylesheets().add("packagename/testcss.css");

我的 testcss.css 是:

.button { 
-fx-background-color: #DDFFA4;
}

.button:hover {
-fx-background-color: #9ACD32;
}

我实现的是在 Web 应用程序中的悬停效果。

enter image description here ... enter image description here

问题
我如何在没有单独的 css 文件的情况下,仅通过我的按钮的 setStyle 方法实现相同的效果?
问题是 setStyle 只接受样式定义而忽略了选择器。

button.setStyle("-fx-background-color: #DDFFA4;");

选择器,在我的悬停情况下是伪类:

.button:hover

但是我应该在哪里设置呢?

此外,javadoc 明确地从 setStyle 方法参数中排除了选择器:

Note that, like the HTML style attribute, this variable contains style properties and values and not the selector portion of a style rule.

最佳答案

正如您在问题中指出的那样,从 JavaFX 2.2 开始,css 伪类不会作为您可用于在 Java 代码中进行样式操作的公共(public) API 的一部分公开。

如果您想在不使用样式表的情况下从 Java 代码更改样式属性,则需要根据事件或更改监听器设置样式。下面的示例中有几个选项。

import javafx.application.Application;
import javafx.beans.binding.*;
import javafx.beans.property.SimpleStringProperty;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.Stage;

/** Changing button styles on hover without a css stylesheet. */
public class ButtonBackgroundChanger extends Application {
private static final String STANDARD_BUTTON_STYLE = "-fx-background-color: #DDFFA4;";
private static final String HOVERED_BUTTON_STYLE = "-fx-background-color: #9ACD32;";

public static void main(String[] args) throws Exception { launch(args); }
@Override public void start(final Stage stage) throws Exception {
Button configure = new Button("Configure");
changeBackgroundOnHoverUsingBinding(configure);
Button update = new Button("Update");
changeBackgroundOnHoverUsingEvents(update);

VBox layout = new VBox(10);
layout.setAlignment(Pos.CENTER);
layout.setStyle("-fx-padding: 10;");
layout.getChildren().addAll(configure, update);
stage.setScene(new Scene(layout));
stage.show();
}

private void changeBackgroundOnHoverUsingBinding(Node node) {
node.styleProperty().bind(
Bindings
.when(node.hoverProperty())
.then(
new SimpleStringProperty(HOVERED_BUTTON_STYLE)
)
.otherwise(
new SimpleStringProperty(STANDARD_BUTTON_STYLE)
)
);
}

public void changeBackgroundOnHoverUsingEvents(final Node node) {
node.setStyle(STANDARD_BUTTON_STYLE);
node.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
node.setStyle(HOVERED_BUTTON_STYLE);
}
});
node.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
node.setStyle(STANDARD_BUTTON_STYLE);
}
});
}
}

如果颜色需要非常动态,使用具有预定义颜色和样式的样式表有问题,或者如果有其他一些厌恶使用 css 样式表,我只会在代码而不是样式表中真正做到这一点。

在 JavaFX 8 中有一个公共(public) API,它允许您(如果您愿意)manipulate Region background colors without use of CSS .

示例程序输出(悬停更新按钮):

sample program output

关于css - javafx 2 和 css 伪类 : setting hover attributes in setStyle method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com