【问题标题】:JavaFX combo box style button if editableJavaFX 组合框样式按钮(如果可编辑)
【发布时间】:2014-10-23 17:06:45
【问题描述】:

我遇到了一个奇怪的情况,在 javafx 中设置组合框按钮的样式。目前,我有

.combo-box .arrow {
    -fx-background-color: black;
}

.combo-box .arrow-button {
    -fx-background-color: white;
    -fx-size: 5;
}

将按钮的背景颜色设置为白色,将箭头设置为黑色。如果组合框不可编辑,这很好。但是,如果我有可编辑的组合框,则不会应用此 CSS。

如果组合框是可编辑的,有谁知道我如何设置下拉按钮的样式?

public class SSCCE extends Application{

@Override
public void start(Stage primaryStage) throws Exception {
    VBox root = new VBox();
    primaryStage.setScene(new Scene(root));

    ComboBox editable = new ComboBox();
    editable.setEditable(true);
    editable.setPrefWidth(125);

    ComboBox notEditable = new ComboBox();
    notEditable.setEditable(false);
    notEditable.setPrefWidth(125);

    root.getChildren().addAll(editable, notEditable);
    primaryStage.sizeToScene();
    primaryStage.show();

    StyleManager.getInstance().addUserAgentStylesheet("/theme/styles/ComboBox.css");
}

public static void main(String[] args) {
    launch(args);
}

}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 在编辑中添加。显然,您必须更改 CSS 文件的路径。

标签: java css combobox javafx-2 javafx-8


【解决方案1】:

希望回答您的问题还不晚...为了更改箭头颜色,我们需要通过 CSS 组合框基类及其子结构访问它,直到我们到达箭头:

.combo-box-base > .arrow-button > .arrow {
    -fx-background-color: white;
}

你可以在CSS reference for Java 8找到它

【讨论】:

    【解决方案2】:

    StyleManager 不是公共 API 的一部分,我不知道它的作用。

    使用标准机制添加样式表:

        scene.getStylesheets().add(getClass().getResource("/theme/styles/ComboBox.css").toExternalForm());
    

    上图使用StyleManager:下图使用scene.getStylesheets().add(...)

    【讨论】:

    • 我了解使用 Style Manager 的风险,因为它不是公共 API。我还在使用 Suns 的一些私有 API 来处理其他事情。但这并不能解决问题。
    • 我用你的代码(没有将 css 应用到可编辑的 ComboBox 的箭头)和我的代码都测试了它;使用scene.getStylesheets().add(...) 为我解决了这个问题。
    • 有趣。对于我的应用程序,为显示的每个阶段执行 scene.getStylesheets().add(...) 对我来说会很麻烦(因为可能有很多)。我有点假设 StyleManager 将所有 CSS 样式表应用于每个场景。不过我的错,我把你的标记为正确的。我想我将不得不对 StyleManager 进行进一步调查。
    • 一种可能的解决方案(在 Java 8 中)是修改 modena.css,然后在您的 start(..) 方法中调用 setUserAgentStylesheet(...)。显然,这不是一个理想的解决方案,因为如果不手动更新修改后的 css 文件,您将无法从更高版本的 modena.css 中的错误修复中受益。
    • 我试过这个东西,但不能使用可编辑的组合框。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多