Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个splitPane的分隔符的单独css规则_Java_Css_Javafx - Fatal编程技术网

Java 一个splitPane的分隔符的单独css规则

Java 一个splitPane的分隔符的单独css规则,java,css,javafx,Java,Css,Javafx,我在css文件中有以下css类 .split-pane > .split-pane-divider { -fx-background-insets: 0; -fx-padding: 0 0 0 0; -fx-background-color: red; } 我有一个带有两个分隔符的拆分窗格,我将这些分隔符引用为节点(!)。我是说 我是这样提到他们的 List<Node> nodes=getDividerNodes(splitPane); lef

我在css文件中有以下css类

.split-pane > .split-pane-divider {  
    -fx-background-insets: 0;
    -fx-padding: 0 0 0 0;  
    -fx-background-color: red;
}
我有一个带有两个分隔符的拆分窗格,我将这些分隔符引用为节点(!)。我是说

我是这样提到他们的

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());
}
然而,我看到了两个分隔符-左和右。此外,如果我只想看到右边的分隔符,我会的

rightDivider.setStyle("-fx-padding: 0 5 0 0;");
我没有看到任何分隔符


在我看来,在一个拆分窗格中单独控制分隔符是不可能的。如果我错了,请告诉我如何只显示两个分隔符中的一个?

这看起来像个bug。特别是,该类包含以下方法:

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
是为单个分隔器计算的,并且在所有分隔器的布局中使用相同的值。因此,所有的分隔器都是相同的尺寸,而不管它们各自有不同的样式


我建议你搜索一下,看看这是否已经被报告了(我做了一个测试,没有发现任何东西),如果没有,就报告

你能详细说明一下你是如何得到除法器的引用的吗?@James\u D我发布了代码。是的,这看起来像一个bug……不幸的是,你找不到一个注册的方法。你知道怎么做吗?@Pavel你可以在没有项目角色的情况下提交bug(尽管你仍然需要Oracle注册:如果你没有帐户,你应该看到创建帐户的链接)。非常感谢你的帮助。
rightDivider.setStyle("-fx-padding: 0 5 0 0;");
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);
        }
    }
}