我正在使用标签导航在JavaFX 2.2上开发全屏应用程序。标签应填充所有屏幕宽度。但是我发现我在标题区域的右侧有10px空间。而且有趣的是:这个空格只有在我切换到最后一个标签后才出现,只有在我切换到第一个标签后才会消失。其他选项卡不会更改此空间,只有在选择最后一个选项卡后才会显示,并在选择第一个选项卡后消失。这里是解释问题的截图(此边距为黄色):
标签的宽度我用简单的公式计算:
double tabWidth = tabPane.getWidth() / tabPane.getTabs().size();
tabPane.setTabMinWidth(tabWidth);
tabPane.setTabMaxWidth(tabWidth);
在CSS类中删除了所有填充。此外,我设置了特殊颜色,以了解谁是这个空间的所有者..并且看起来它是主要的标题区域。这里是CSS-calsses:
.tab-pane .headers-region {
-fx-background-color: yellow;
-fx-padding: 0;
-fx-background-insets: 0;
-fx-effect: null;
}
.tab-pane {
-fx-background-color: white;
-fx-background-insets:0;
-fx-padding: 0;
}
*.tab-header-background {
-fx-padding:0;
-fx-background-insets:0;
}
.tab-pane *.tab-header-background {
-fx-padding:0;
-fx-background-insets:0;
}
.tab:selected {
-fx-background-color: white;
-fx-background-insets: 0;
-fx-background-radius: 0;
}
.tab {
-fx-background-color: white;
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab:top {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab:right {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab:bottom {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab:left {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab:hover {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab-header-area {
-fx-padding: 0;
-fx-background-insets: 0;
}
.tab-pane:top *.tab-header-area {
-fx-background-insets: 0;
-fx-padding: 0;
}
.tab-pane:bottom *.tab-header-area {
-fx-background-insets: 0;
-fx-padding: 0;
}
.tab-pane:left *.tab-header-area {
-fx-background-insets: 0;
-fx-padding: 0;
}
.tab-pane:right *.tab-header-area {
-fx-background-insets: 0;
-fx-padding: 0;
}
.control-buttons-tab {
-fx-background-insets: 0;
-fx-background-radius: 0;
-fx-padding: 0;
}
.tab-down-button {
-fx-background-color: green;
-fx-padding: 0;
}
.tab-down-button .arrow {
-fx-background-insets: 0;
-fx-background:black;
-fx-width:0;
-fx-padding: 0;
-fx-shape: " ";
}
.arrow {
-fx-background-insets: 0;
-fx-background:black;
-fx-width:0;
-fx-padding: 0;
-fx-shape: " ";
}
答案 0 :(得分:3)
问题是TabPaneSkin类,它将Tabs转换为节点。
当他的偏移量大于他的宽度时,需要将TabHeaderArea滚动到左侧(或右侧)。
查看TabHeaderArea类中的方法scrollToSelectedTab(double selected, double previous)
。
我发现解决此问题的唯一方法是创建自定义MyTabPaneSkin(灵感来自TabPaneSkin)并更改方法scrollToSelectedTab
的行为(因为它的所有成员都是私有的,扩展它不会是有用)。
然后,覆盖TabPane类的方法createDefaultSkin
,如下所示:
TabPane tabPane = new TabPane(){
@Override
protected Skin<?> createDefaultSkin() {
return new MyTabPaneSkin(this);
}
};
请注意,您将丢失原始TabPaneSkin的所有改进或修复。
理想情况下,JavaFX应该允许禁用自动滚动...
来实现此功能