2017-09-29 6 views
0

Ich habe Anwendung mit ein paar Farbschemata, die dynamisch geschaltet werden können. Ich möchte JavaFX Region erstellen, einmal Border darauf setzen, und dann nur seine Farbe ändern, ohne ein anderes Objekt zu erstellen und es zu setzen - denn dann muss ich auch irgendwie Breite passieren, und es ändert sich nicht.Gibt es eine Möglichkeit, JavaFX Border zu aktualisieren?

Derzeit ich erstellen und Grenze wie folgt aus:

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

Gibt es eine Möglichkeit nach nur Farbe dieser Grenze zu ändern, es zu schaffen?

Ich dachte auch darüber irgendwie aus dem aktuellen Grenze bekommen, aber es sieht nicht sehr klar zu:

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

und ich habe noch neues Objekt erstellen und es dann eingestellt.

Oder vielleicht gibt es einen besseren Weg, es überhaupt zu tun.

Antwort

0

Wenn Sie den Rahmen programmatisch setzen, denke ich, die einzige Lösung ist, eine neue Border zu erstellen. Some wie:

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

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

Aber wenn Sie die Grenze von CSS festlegen, können Sie einfach nur die Farbe ändern:

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); 
    } 
} 

in app.css:

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