我在css文件中有以下css类
.split-pane > .split-pane-divider {
-fx-background-insets: 0;
-fx-padding: 0 0 0 0;
-fx-background-color: red;
}
我有一个带有两个分频器的splitPane,我将这些分频器称为Node(!)。我的意思是
Node leftDivider;
Node rightDivider;
我以这种方式引用它们
List<Node> nodes=getDividerNodes(splitPane);
leftDivider=nodes.get(0);
rightDivider=nodes.get(1);
...
public static List<Node> getDividerNodes(SplitPane splitPane){
Map<Double,Node> sortedMap=new TreeMap<>();
if (splitPane.getOrientation()==Orientation.HORIZONTAL){
splitPane.lookupAll(".split-pane-divider").stream().forEach(div -> {
if (div.getParent()==splitPane){
sortedMap.put(div.getLayoutX(), div);
}
});
}else{
splitPane.lookupAll(".split-pane-divider").stream().forEach(div -> {
if (div.getParent()==splitPane){
sortedMap.put(div.getLayoutY(), div);
}
});
}
return new ArrayList<>(sortedMap.values());
}
现在我不想显示leftDivider但不显示rightDivider。我做了
leftDivider.setStyle("-fx-padding: 0 5 0 0;");
但是,我看到两个分隔线 - 左右两边。此外,如果我想看到只有正确的分频器,我会
rightDivider.setStyle("-fx-padding: 0 5 0 0;");
我没有看到任何分隔线。
在我看来,在一个splitPane内单独控制分隔是不可能的。如果我错了,请说,我怎么才能只显示两个分隔符中的一个?
答案 0 :(得分:1)
这看起来像个错误。特别是,SplitPaneSkin
类包含以下方法:
private void layoutDividersAndContent(double width, double height) {
final double paddingX = snappedLeftInset();
final double paddingY = snappedTopInset();
final double dividerWidth = contentDividers.isEmpty() ? 0 : contentDividers.get(0).prefWidth(-1);
for (Content c: contentRegions) {
// System.out.println("LAYOUT " + c.getId() + " PANELS X " + c.getX() + " Y " + c.getY() + " W " + (horizontal ? c.getArea() : width) + " H " + (horizontal ? height : c.getArea()));
if (horizontal) {
c.setClipSize(c.getArea(), height);
layoutInArea(c, c.getX() + paddingX, c.getY() + paddingY, c.getArea(), height,
0/*baseline*/,HPos.CENTER, VPos.CENTER);
} else {
c.setClipSize(width, c.getArea());
layoutInArea(c, c.getX() + paddingX, c.getY() + paddingY, width, c.getArea(),
0/*baseline*/,HPos.CENTER, VPos.CENTER);
}
}
for (ContentDivider c: contentDividers) {
// System.out.println("LAYOUT DIVIDERS X " + c.getX() + " Y " + c.getY() + " W " + (horizontal ? dividerWidth : width) + " H " + (horizontal ? height : dividerWidth));
if (horizontal) {
c.resize(dividerWidth, height);
positionInArea(c, c.getX() + paddingX, c.getY() + paddingY, dividerWidth, height,
/*baseline ignored*/0, HPos.CENTER, VPos.CENTER);
} else {
c.resize(width, dividerWidth);
positionInArea(c, c.getX() + paddingX, c.getY() + paddingY, width, dividerWidth,
/*baseline ignored*/0, HPos.CENTER, VPos.CENTER);
}
}
}
如您所见,dividerWidth
是针对单个分频器计算的,并且在所有分频器的布局中使用相同的值。因此,所有分隔器都具有相同的尺寸,而不管它们各自具有不同的样式。
我建议您搜索以查看是否已经报告(我做了quick search并且没有找到任何内容),如果没有,则报告。