2017-08-07 2 views
0

Ich habe eine ChangeListener dass, wenn ausgelöst, eine findGPA() Methode aufgerufen wird.Wie bindet man eine StringProperty an ein BigDecimal?

private BigDecimal decGPA = BigDecimal.ZERO; 

Im initialize() Methode::

private void findGPA(){ 
    GPA = gradeCre/sum; 
    decGPA = new BigDecimal(GPA); 
    decGPA = decGPA.setScale(2, RoundingMode.CEILING); 
    System.out.println("Your average GPA is: " + decGPA); 
} 

The BigDecimal wird wie folgt initialisiert

SubmitStageBorderPane.setBottom(AddStackCircle()); 

die Anrufe:

private StackPane AddStackCircle(){ 

    StackPane stackCircle = new StackPane(); 
    StringProperty gpa = new SimpleStringProperty(""); 
    gpa.bind(new SimpleStringProperty(decGPA.toString())); 

    Text avgGPA = createText("Your semester GPA is: " + gpa); 
    Circle resultCircle = createCircle(avgGPA); 

    stackCircle.getStyleClass().add("stackCircle"); 
    stackCircle.getChildren().addAll(resultCircle, avgGPA); 

    return stackCircle; 
} 

private Circle createCircle(Text avgGPA){ 

    Circle resultCircle = new Circle(); 
    resultCircle.setFill(Color.GREEN); 
    resultCircle.setStroke(Color.GREY); 
    resultCircle.setStrokeWidth(3); 
    resultCircle.setRadius(getWidth(avgGPA)/2 + 10); 

    return resultCircle; 
} 

private Text createText(String text){ 

    Text avgGPA = new Text(text); 
    avgGPA.setBoundsType(TextBoundsType.VISUAL); 
    avgGPA.getStyleClass().add("avgGPA"); 

    return avgGPA; 
} 

Wenn jedoch i es laufen, es pro duziert den folgenden Etikettentext Your semester GPA is: StringProperty[bound, invalid], und es ändert sich auch nicht, wenn sich der Wert decGPA ändert.

+0

Mögliches Duplikat [Bidirektionale Bindungen unterschiedlicher Eigenschaften] (https://stackoverflow.com/questions:

die findGPA Methode richtig wie folgt aufgerufen Unter der Annahme, sollte es umgesetzt werden/14138082/bidirektionale Bindungen von unterschiedlichen Eigenschaften) – Flown

Antwort

2

Damit der Text aktualisiert wird, müssen Sie den Text des -Knotens binden, anstatt einfach den Text festzulegen. Außerdem sollten Sie es an eine Eigenschaft binden, die tatsächlich aktualisiert wird, und nicht nur an eine Eigenschaft, die nie geändert wird (wie new SimpleStringProperty(decGPA.toString())).

private final ObjectProperty<BigDecimal> decGPA = new SimpleObjectProperty(BigDecimal.ZERO); 

private void findGPA(){ 
    GPA = gradeCre/sum; 
    decGPA.set(BigDecimal.valueOf(GPA).setScale(2, RoundingMode.CEILING)); 
    System.out.println("Your average GPA is: " + decGPA.get()); 
} 

private Text createText(ObservableValue<String> textExpression){ 

    Text avgGPA = new Text(); 
    avgGPA.textProperty().bind(textExpression); 
    avgGPA.setBoundsType(TextBoundsType.VISUAL); 
    avgGPA.getStyleClass().add("avgGPA"); 

    return avgGPA; 
} 
Text avgGPA = createText(decGPA.asString("Your semester GPA is: %s")); 
+0

Vielen Dank! funktioniert wie vorgesehen –

Verwandte Themen