有没有办法更新JavaFX Border?

时间:2017-09-29 09:28:17

标签: java javafx border

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

目前我创建和设置边框:

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

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

我还考虑过以某种方式从当前边界获取它,但它看起来也不是很清楚:

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

然后我仍然需要创建新对象然后设置它。

或者也许有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

如果以编程方式设置边框,我认为唯一的解决方案是创建新的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
}