JavaFx:选项卡圆角

时间:2015-06-07 06:53:08

标签: java javafx

要使我的标签边角变圆,请使用以下代码:

.tab {
    -fx-border-radius: 10 10 0 0;
    -fx-background-radius: 10 10 0 0;
}

.tab:selected .focus-indicator {
    -fx-border-radius: 10 10 0 0, 10 10 0 0;
}

但是,我的行为很奇怪。创建新标签时,它会有一些额外的角落,当我更改焦点或创建新标签时,这些角落会消失。 例如 - 我创建了第一个选项卡。 enter image description here

现在我创建了第二个标签。第一个标签已经正常,但第二个标签有这个奇怪的角落。 enter image description here

我已经检查了centos和win7 - 行为是一样的。如何解决?

编辑1
这是我的所有css文件。最终目标是使标题标题更大,圆角。

.tab:selected .focus-indicator {
    -fx-border-radius: 10 10 0 0, 10 10 0 0;
     -fx-border-insets: -7 -7 -9 -8, -5 -5 -9 -6;
}

.tab-pane > .tab-header-area > .headers-region > .tab:selected{
    -fx-border-insets: 10 10 10 10, 10 10 10 10;
}

.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > 
.tab-label {
    -fx-alignment: CENTER;
    -fx-text-fill: -fx-text-base-color;
    -fx-padding:0 10 0 0;
}

.tab-header-area .tab{
    -fx-padding:4 10 5 10;
    -fx-border-radius: 10 10 0 0;
    -fx-background-radius: 10 10 0 0;
}

编辑2
我在两台不同的PC上检查过它:1(Ubuntu),2(Centoc 71和VM Win7)。我试着用oracle jdk编译 - 结果是一样的。

3 个答案:

答案 0 :(得分:3)

这是已报告的错误https://javafx-jira.kenai.com/browse/RT-40462

更新错误已转移到openjdk错误跟踪系统:

<强> https://bugs.openjdk.java.net/browse/JDK-8090243

您的部分代码是多余的。所以这应该有用。

.tab:selected .focus-indicator {
    -fx-border-radius: 10 10 0 0, 10 10 0 0;
    -fx-border-insets: -6 -9 -8 -8, -5 -8 -7 -7;
}
/*
.tab-pane > .tab-header-area > .headers-region > .tab:selected{
    -fx-border-insets: 0 1 1 0, 1 2 0 1, 2 3 0 2;
}
*/
.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label {
    -fx-padding:0 10 0 0;
}

.tab-header-area .tab{
    -fx-padding:4 10 5 10;
    -fx-background-radius: 10 10 0 0;
}

这将是这样的:

enter image description here

<强>更新

但是如果你真的只想在圆角上有更多的半径,那么这就是你所要做的:

.tab-pane > .tab-header-area > .headers-region > .tab {
    /* if outer border should be 10 radius */
    -fx-background-radius: 10 10 0 0, 9 9 0 0, 8 8 0 0;
}

.tab-pane:focused > .tab-header-area > .headers-region > .tab:selected .focus-indicator {
    -fx-border-radius: 9 9 0 0, 8 8 0 0;
}

<强>更新

这是我从您的代码中获得的。添加新创建的选项卡时会出现奇怪的行为。所以我制作了一个gif来展示鼠标悬停是如何工作的。

enter image description here

<强>更新

答案 1 :(得分:2)

所以让我们假设它是一个错误,你css很好,我现在看到的唯一解决方案是在延迟一段时间后删除并添加默认样式。像这样:

 Tab tab = new Tab("Tab " + (tabs.getTabs().size() + 1));
 tabs.getTabs().add(tab);
 new Thread(()-> {
     try {
         Thread.sleep(50);
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
     Platform.runLater(()->{
           tabs.getStyleClass().remove("tab-pane");
           tabs.getStyleClass().add("tab-pane");
     });
 }).start();

令人讨厌的黑客说实话,但它适用于我:enter image description here

答案 2 :(得分:0)

它是CornerRadii,只是增加&amp;降低