2017-09-29 5 views
0

동적으로 전환 할 수있는 몇 가지 색상 스키마가있는 응용 프로그램이 있습니다. JavaFX Region을 작성하고 Border을 한 번 설정 한 다음 다른 오브젝트를 작성하지 않고 색상을 변경하고 설정하십시오. 여하튼 너비를 전달해야하므로 변경할 필요가 없습니다.JavaFX Border를 업데이트하는 방법이 있습니까?

은 현재 내가 만들고 그런 경계 설정 :

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

를 만든 후,이 Border의 색상을 변경할 수있는 방법이 있나요를?

는 또한 현재의 국경에서 어떻게 든 것에 대해 생각하지만 너무 분명 보이지 않는 :

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

을하고 난 여전히 새로운 객체를 생성 한 다음 설정해야합니다.

아니면 더 좋은 방법이 있습니다.

답변

0

프로그래밍 방식으로 테두리를 설정하면 유일한 해결책은 Border을 새로 만드는 것입니다. 같은 Somethink :

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에서 국경을 설정하면, 당신은 단순히 색상 만 변경할 수 있습니다 app.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); 
    } 
} 

:

.myborderedregion { 
    -fx-border-color:green; 
    -fx-border-width:5px 
} 
관련 문제