Как иметь одну и ту же программу без класса атрибута, который здесь находится в частном счетчике int - PullRequest
0 голосов
/ 11 октября 2019
public class main extends Application{

    private int counter=0; 

    public static void main(String[] args) {

    launch(args);

    }

     public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("add and sub");




     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);
     b.setOnAction(e ->
     {
     counter++;
     l.setText(""+counter);
     });
     b2.setOnAction(e ->
     {
     counter--;
     l.setText(""+counter);
     });

     Scene scene = new Scene(root, 300, 100);
     primaryStage.setScene(scene);

     primaryStage.show();   
}

Итак, мой вопрос: если кто-нибудь может мне помочь, я хочу получить тот же эффект и тот же код, но без использования какого-либо атрибута класса или какого-либо статического атрибута.

Атрибут класса здесь - это частный счетчик int, который я хочу удалить и использовать что-то еще, что дает мне тот же эффект

Так что в основном та же программа, но без атрибута класса - у кого-нибудь есть идея? ? Спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Возможно, вы захотите использовать счетчик для чего-то другого, позже или увеличить его за пределами ввода пользовательского интерфейса.

Проблема с "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();   
}

0 голосов
/ 11 октября 2019

Вы можете прочитать текущее значение с метки и проанализировать его.

Integer counter = Integer.parseInt(l.getText());
counter++;
l.setText(counter.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...