有没有办法更新 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
}
我有几个颜色模式的应用程序,可以动态切换。我想创建 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
}