当前位置: 首页 > 知识库问答 >
问题:

变量更改前计数器的侦听器

凤棋
2023-03-14

是否有一种方法来构建侦听器,以检测日期是否仍被传输到变量,如果是,则做一件事,当不做另一件事?

例如

直到“int counter1”增加设置布尔值(true)或打印或更改另一个int值为1

int计数器(不再增加或减少),设置布尔值(false),打印不同的东西,改变另一个int为2。

基本上变量改变加或减,做一件事停止改变,做另一件事重新开始改变,回去做第一件事等。

有办法做到这一点吗?没有明显的整体if语句压缩方式。

共有1个答案

壤驷凯
2023-03-14

最简单的方法是通过getter和setter访问该变量。您可以将首选逻辑放入setter中,并从那里跟踪所有突变。

public class Main {

    static int observable = 0;

    static void setObservable(int newValue) {
        if (observable != newValue) {
            System.out.printf("Observable int has been changed from %d to %d.%n", observable, newValue);
            observable = newValue;
        }
    }

    public static void main(String[] args) {

        observable = 1; // Nothing notified us that value has been changed

        setObservable(2); // Console output 'Observable int changed from 1 to 2.'
    }
}

还有很多其他方法可以实现相同的功能:使用getter和setter创建实际的java bean,在自己的基础上实现可观察和观察接口,或者使用现成的内置解决方案,例如IntegerProperty:

    IntegerProperty intProperty = new SimpleIntegerProperty();
    intProperty.addListener((observable, oldValue, newValue) -> {

        if (!oldValue.equals(newValue) ) {
            System.out.printf("Value has been changed from %d to %d!%n", oldValue.intValue(), newValue.intValue());
        }
    });

    intProperty.setValue(1); // Output: Value has been changed from 0 to 1!
    intProperty.setValue(2); // Output: Value has been changed from 1 to 2!
    intProperty.setValue(2); // No output

    System.out.println(intProperty.intValue()); // Output: 2

至于“停止更改”监听器,这是一个稍微复杂的问题。根据具体情况,我可以想到几种可能的解决方案:
1)如果您的循环是可预测的并由您决定的,只需根据需要手动编写逻辑

/* listening for changes up there  */

System.out.println("I'll go get some coffee");
Thread.sleep(60000); // stopped changing, eh?

/* do your stuff */

/* Continue listening for changes below  */

2)如果您的循环是不可预测的,但由您设计,您可以尝试使其更可预测,设计一组规则和协议,以遵循,例如,如果新值正好为零,系统将暂停并切换到另一个任务
3)您也可以运行后台任务,该任务将定期检查上次更新的时间,以确定系统是否空闲

有很多可能的解决方案可以建议,但在不了解更多细节的情况下,我无法提出更具体的方案

 类似资料:
  • 问题内容: 假设我使用statement定义了一些变量。代码运行时,变量的值会更改。 如何跟踪此变量的变化?我如何实现某些行为类似于onSomeVariableChangedListener的侦听器? 我还需要知道何时在一个页面中执行了其他方法,以便可以在另一个类中设置侦听器。 问题答案: 这是将变量隐藏在 setter / getter 对后面的众多原因之一。然后,在设置器中,您可以通知您的侦听

  • 在我的代码中,如果用户在ComboBox 2中输入值,它将反映在TextField中,但是如果用户从ComboBox 1的下拉列表中选择,而不更改ComboBox 2中的值,那么TextField中的值将保持不变,它不会更改。我做错了吗? 测试2。txt:1任何帮助都将不胜感激!

  • 问题内容: 我希望消息框在用户更改文本字段中的值后立即显示。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为您自动创建的基础文档中。

  • 问题内容: 我想一种添加到我当过用户更改的,它的值,应用程序在控制台上打印的东西。 我进行了搜索,发现以下非常相似的问题:JTextField的值更改侦听器 提到的问题的答案非常清楚和有效,但是不幸的是,它仅对(Not )有用,因为它说您应该像这样使用DocumentListener: 但是在JavaFX的TextField中,您无法执行此操作。所以?解决办法是什么? (使用代码进行描述可能会很好

  • 问题内容: 每当尝试从中进行选择时,我都试图触发一个事件。 我遇到的问题是没有明显的方法。 我尝试使用,但从未触发。 没有覆盖的模型,我没有想法。 如何通知有关 选择更改的通知? 编辑:我要道歉。事实证明,我使用的是行为不佳的子类,但由于你的回答是好的,因此我将保留该问题。 问题答案: 它应该响应,如下所示: 正确地指出了也可以。但是,你可能会得到 ,一个用于取消选择先前选择的项目,另一个用于选择

  • 问题内容: 我希望在用户更改文本字段中的值后立即显示消息框。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为你自动创建的基础文档中。