Java 如何在没有属性类(这里是int私有计数器)的情况下拥有相同的程序

Java 如何在没有属性类(这里是int私有计数器)的情况下拥有相同的程序,java,class,javafx,attributes,Java,Class,Javafx,Attributes,我希望获得相同的效果和相同的代码,但不使用任何类属性或任何静态属性 这里的class属性是int-private计数器,我想去掉它,然后使用其他的东西来实现同样的效果 public class main extends Application{ private int counter=0; public static void main(String[] args) { launch(args); } public void

我希望获得相同的效果和相同的代码,但不使用任何类属性或任何静态属性

这里的class属性是int-private计数器,我想去掉它,然后使用其他的东西来实现同样的效果

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

您可以从标签中读取当前值并对其进行解析

Integer counter = Integer.parseInt(l.getText());
counter++;
l.setText(counter.toString());

您可能希望稍后将计数器用于其他用途,或者在UI输入之外增加它

“int”和lambda的问题是,lambda是“匿名类”的快捷表示形式。在methodscope中,“int增量”将导致问题,除非您在其他对象上静态执行(不推荐使用),或者使用对象容器。 只能在Lambdas中有效地使用最终对象。不允许对Lambda表达式外部初始化的对象进行重新分配操作

您可以使用属性对象。您希望递增计数器,然后递增的计数器应在视图中表示。 这意味着当计数器改变时,标签应该改变。 有时可能不是一个按钮改变了计数器,而是你从一个请求中计算或接收到的东西

或者你想更新时间或者别的什么

public void start(Stage primaryStage)引发异常{
初级阶段。设置标题(“添加和子”);
//这是一种允许您拥有对象的方法
//这是可以观察到的,并且可以通知对其他内容的更改
//它有一个整数类型的值
IntegerProperty计数器=新的SimpleIntegerProperty(0);
按钮b=新按钮(“+”);
按钮b2=新按钮(“-”);
GridPane root=新的GridPane();
标签l=新标签(“0”);
加(b,0,0);
加(l,0,1);
根添加(b2,0,2);
//在这里你可以增加和减少计数器
b、 设定动作(e->
{
counter.set(counter.get()+1);
});
b2.设定动作(e->
{
counter.set(counter.get()-1);
});
//现在,您希望每当计数器发生变化时标签都被更新
//添加一个具有参数的侦听器:对象本身、旧值、,
//以及新的价值观。
//每当属性更改时,都将调用此方法
//按钮。它将始终更新标签
counter.addListener((对象、旧值、新值)->{
outText.setText(“+newValue”);
});
场景=新场景(根,300,100);
初级阶段。场景(场景);
primaryStage.show();
}

您似乎在学习本地字段:)最好重新阅读该章的课程手册(提示:最后,从类主体到方法主体只是一个简单的移动……略作省略)。。啊。。有一个我一开始没有看到的问题:你正在更换lambda中的计数器-因此你也需要重新阅读关于lambda规则的章节:)这使得你的要求更具设计性。我应该把它放在哪里?你可以进一步解释吗?你可以进一步解释我应该在哪里添加它,因为我想删除私有int吗计数器,不使用任何类属性,如果您知道我的意思,将普通int装箱成整数时没有任何附加值,是不是;)@OP-为什么?这个要求听起来很做作,就像作业一样。这是一个很好的问题,但应该激励你学习基本知识:)@kleopatra:拳击是故意插入的。附加值是使用了
.toString()
,这是一个比
“”+计数器更好的解决方案