我有几个颜色模式的应用程序,可以动态切换。我想创建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();
然后我仍然需要创建新对象然后设置它。
或者也许有更好的方法可以做到这一点。
答案 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
}