【问题标题】:JavaFx: tab rounded cornersJavaFx:制表符圆角
【发布时间】:2015-08-21 20:14:50
【问题描述】:

为了使标签角变圆,我使用以下代码:

.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;
}

但是,我得到了相当奇怪的行为。创建新选项卡时,它有一些额外的角,稍后当我更改焦点或创建新选项卡时会消失。 例如 - 我创建了第一个选项卡。

现在我创建第二个标签。第一个选项卡已经正常,但第二个选项卡有这个奇怪的角落。

我检查了 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 编译 - 结果是一样的。

【问题讨论】:

  • 这是因为它的 SELECTED - 我猜你可以围绕选择模型来改变它的风格
  • @Elltz 我是 javafx 初学者。能说下怎么玩吗:)
  • 对所有属性应用相同的样式,例如为选项卡选择,鼠标方式等。
  • -fx-border-insets: -4 -4 -6 -5, -2 -2 -5 -3; 是带有焦点指示器的选定选项卡上的默认值。所以你必须覆盖它。
  • @NwDx 我已经覆盖了它们,因为我需要让它们变得更糟(来自我们之前的讨论)。但这没有帮助。

标签: java javafx


【解决方案1】:

这是一个已报告的错误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;
}

看起来像这样:

更新

但是,如果您真的只想让圆角的半径更大,那么您所要做的就是:

.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 来展示鼠标悬停是如何工作的。

更新

【讨论】:

  • 首先我要感谢您的帮助。但是,你根本没有理解我的问题。我提供的代码是我需要的 100%。没有红色,没有特殊的焦点边框。你是从哪里弄来的?我遇到的唯一问题是“奇怪的角落”。
  • 我认为这与您的其他问题有关 (stackoverflow.com/questions/30690166/…)。如果没有,没关系。
  • 真的很抱歉。我知道我们如何通过程序员 f*** 来获得我们需要的东西。我非常感谢你的尝试。但无论如何……这个问题怎么解决?
  • 所以请向我解释一下,您真正​​需要什么?只有正确的边界半径?是否被选中?
  • 首先 - 我在 EDIT 1 中提供的代码是我需要的 100%。但是,它有一些问题。当我在左上角和右上角附近创建新标签时,会出现一些奇怪的东西,然后消失。查看提供的图像。如何去除“这些奇怪的东西”。
【解决方案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();

说实话很讨厌,但它对我有用:

【讨论】:

  • 您的PC上是否有同样的问题?我的意思是你看到这些奇怪的角落了吗?
  • 是的,正如@NwDx 发现的那样,这是一个错误javafx-jira.kenai.com/browse/RT-40462
  • 如何创建帐户来阅读它?谁是 jira 管理员?
  • 不知道)我也无法访问此错误跟踪器)
  • 嗯,希望在另一个线程中更改内容不会造成麻烦,因为 JavaFX 在自己的线程中运行就像 Swing 一样,并且每个控件都应该在那里操作。
【解决方案3】:

它是CornerRadii,它只是增加和减少

【讨论】:

  • 您能举个例子吗?
  • @varren 你能评论这篇文章吗?
  • 谁是varren?@JimJim2000 我?
  • 不,用户varren 是用户varren,见上面的帖子。您能否举例说明您在回答中的意思?
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 2018-05-07
  • 2020-11-30
  • 2013-05-10
  • 1970-01-01
  • 2014-12-10
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多