使用Path将带有圆角的矩形作为ProgressBar

时间:2018-11-20 13:08:22

标签: javafx graphics javafx-8 graphics2d javafx-9

我需要在javafx中用进度条绘制矩形圆角。
我已经做了一些代码绘制带有角的矩形。 但是我如何显示进度效果。 以下是我尝试模仿的示例。 http://jsfiddle.net/m1erickson/P2qTq/

还有其他方法可以做到这一点。指导我谢谢你。

Tumbling time window - Time-based   Fixed-size, non-overlapping, gap-less windows
Hopping time window- Time-based Fixed-size, overlapping windows
Sliding time window- Time-based Fixed-size, overlapping windows that work on differences between record timestamps
Session window

->更新<-

我找到了另一种方法。使用带有笔触偏移量的Rectangle。 但仍然面临一个问题,从顺时针开始

Math.Max(InsideRadius, 20)

如果您知道更好的解决方案,请告诉我。

1 个答案:

答案 0 :(得分:3)

我使用Rectangle和stroke-dash-offset解决了它。这可能会帮助他人并节省宝贵的时间。

    Rectangle rectangle= new Rectangle();
    rectangle.setX(offsetX);
    rectangle.setY(offsetY);
    rectangle.setWidth(200);
    rectangle.setHeight(200);
    rectangle.setStroke(Paint.valueOf("#000000"));
    rectangle.setFill(Color.TRANSPARENT);
    rectangle.setStrokeWidth(5);
    rectangle.setStrokeMiterLimit(5);
    rectangle.setSmooth(true);
    rectangle.setStrokeLineCap(StrokeLineCap.ROUND);
   // rectangle.setStrokeLineJoin(StrokeLineJoin.ROUND);
    double length=rectangle.getWidth()*2+rectangle.getHeight()*2;

    //set stroke dash length
    rectangle.getStrokeDashArray().addAll(length);

   //display empty stroke/border
    rectangle.setStrokeDashOffset(length);

    group.getChildren().add(rectangle);
    container.add(group,0,0);

    slider.valueProperty().addListener((observable, oldValue, newValue) -> {
            double offset=length-((length*(newValue.doubleValue()/100)));
            rectangle.setStrokeDashOffset(-offset);
    });