JavaFX TitledPane 双边框使用 css 文件

标签 java javafx

我有这个代码:

public void start(Stage primaryStage){

    TitledPane titledPane = new TitledPane("TITLE", null);
    titledPane.setContent(new javafx.scene.control.TextArea("Batman"));

    Scene scene = new Scene(titledPane);
    scene.getStylesheets().add(getClass().getClassLoader().getResource("style.css").toExternalForm());

    primaryStage.setScene(scene);
    primaryStage.show();

}

样式.css:

.titled-pane .title,
.titled-pane .content{
    -fx-background-color: white;
    -fx-border-style: solid;
    -fx-border-color: black;
    -fx-border-width: 1px;
}

结果是:

我不明白为什么会出现 2 个边框。

如果我删除 style.css 并使用 setStyle:

public void start(Stage primaryStage){

    TitledPane titledPane = new TitledPane("TITLE", null);
    titledPane.setContent(new javafx.scene.control.TextArea("Batman"));

    Platform.runLater(() -> {

        titledPane.lookup(".title").setStyle("-fx-background-color: white;" +
                                                        "-fx-border-style: solid;" +
                                                        "-fx-border-color: black;" +
                                                        "-fx-border-width: 1px;");

        titledPane.lookup(".content").setStyle("-fx-background-color: white;" +
                                                        "-fx-border-style: solid;" +
                                                        "-fx-border-color: black;" +
                                                        "-fx-border-width: 1px;");

    });

    Scene scene = new Scene(titledPane);
    //scene.getStylesheets().add(getClass().getClassLoader().getResource("style.css").toExternalForm());

    primaryStage.setScene(scene);
    primaryStage.show();

}

现在看起来不错:

为什么使用css文件结果不同?

最佳答案

我发现了问题。这是在CSS

.titled-pane .title,
.titled-pane .content{
   ...
}

这个.titled-pane .content选择所有子节点contenttitled-pane ,甚至titled-pane的子节点的子节点

结构titledPane.setContent(new javafx.scene.control.TextArea("Batman"));是:

TitledPane -> title
           -> content = TextArea -> scroll-pane -> content

所以我的CSS都改变了content ,这会导致将边框添加到 scroll-pane -> content

仅修改直接子节点 titledpane -> titletitledpane-> title ,我需要使用> :

.titled-pane > .title,
.titled-pane > .content{
   ...
}

关于JavaFX TitledPane 双边框使用 css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56239506/

相关文章:

java - 冰雹序列 (Java)

java - 无法运行 solr(无法打开日志文件)

java - 为什么 gc.clearRect 不会清除 Canvas ?

java - 使用页面工厂处理分页

java - 如何使用 spring MVC 将数据从数据库导出到 excel 表?

java - 有没有办法将整数值从映射器类传递到所有 reducer

java - 打印值表

JavaFX FileChooser 新文件

java - 将HashMap的值设置为标签的文本

graphics - JavaFX 设计器