Возможно, вы захотите использовать счетчик для чего-то другого, позже или увеличить его за пределами ввода пользовательского интерфейса.
Проблема с "int" и лямбдами заключается в том, что лямбды являются сокращенными представлениями для "анонимных классов". ,в методе «приращение int» вызовет проблемы, если вы не сделаете это статическим (который не рекомендуется) для другого объекта или не имеете контейнер объекта. Вы можете использовать только эффективные конечные объекты в Lambdas. Операции переназначения объектов, которые инициализируются вне лямбда-выражения, не допускаются.
Вы можете использовать объект недвижимости. Вы хотите увеличить счетчик, а затем увеличенный счетчик должен быть представлен в представлении. Значение метка должна быть изменена при изменении счетчика. Возможно, иногда не кнопка изменяет счетчик, а что-то, что вы вычисляете или получаете по запросу.
Или вы хотите обновить время или что-то еще
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("add and sub");
// this is a way that allows you to Have a Object
// that is observable and can notify a change to something else
// it has a value of the Type Integer
IntegerProperty counter= new SimpleIntegerProperty(0);
Button b = new Button("+");
Button b2 = new Button("-");
GridPane root = new GridPane();
Label l = new Label("0");
root.add(b, 0, 0);
root.add(l, 0, 1);
root.add(b2, 0, 2);
// Here do you increment and decrement the counter
b.setOnAction(e ->
{
counter.set(counter.get()+1);
});
b2.setOnAction(e ->
{
counter.set(counter.get()-1);
});
// Now you want to have the Label uptdated whenever the counter changes
// you add a listener wich has the the Parameters: the object itself, the old value,
//and the new Value.
// this method will be called whenever the Property changes. Not only if you push a
// button. It will always update the Label
counter.addListener((obj,oldValue,newValue)->{
outText.setText("" + newValue);
});
Scene scene = new Scene(root, 300, 100);
primaryStage.setScene(scene);
primaryStage.show();
}