有没有办法更新 JavaFX 边框?

Is there a way to update JavaFX Border?

我有几个颜色模式的应用程序,可以动态切换。我想创建 JavaFX Region,在其上设置 Border 一次,然后只更改其颜色,而不创建另一个对象并设置它 - 因为那时我还需要以某种方式传递宽度,但它不会'改变。

目前我是这样创建和设置边框的:

 Border border = new Border(
                   new BorderStroke(
                       borderColor, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, 
                     new BorderWidths(borderWidth)));
 this.setBorder(border);

有没有办法在创建后仅更改此边框的颜色?

我也想过从current border中获取,但是看起来也不是很清楚:

region.getBorder().getStrokes().get(0).getWidths().getBottom();

而且我仍然需要创建新对象然后进行设置。

或者也许有更好的方法。

如果您以编程方式设置边框,我认为唯一的解决方案是创建一个新的 Border。有点像:

BorderStroke borderStroke = region.getBorder().getStrokes().get(0);

region.setBorder(null);
region.setBorder(new Border(new BorderStroke(
        cp.getValue(), borderStroke.getTopStyle(), borderStroke.getRadii(),
        borderStroke.getWidths())));

但是如果你从 CSS 设置边框,你可以只改变颜色:

public class RegionBorder extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        Region region = new Region();
        // Standard color, width, etc ...
        region.getStyleClass().add("myborderedregion");

        BorderPane bp = new BorderPane();
        bp.setCenter(region);

        ColorPicker cp = new ColorPicker();
        // Change only the color
        cp.valueProperty().addListener((obs, oldval, newval) -> 
                region.setStyle("-fx-border-color: " + String.format( "#%02X%02X%02X",
                (int)( cp.getValue().getRed() * 255 ),
                (int)( cp.getValue().getGreen() * 255 ),
                (int)( cp.getValue().getBlue() * 255 ) )));

        bp.setBottom(cp);

        Scene scene = new Scene(bp, 500, 500);
        scene.getStylesheets().add(getClass().getResource("app.css").toString());

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在 app.css:

.myborderedregion {
    -fx-border-color:green;
    -fx-border-width:5px
}