Skip to main content
 首页 » 编程设计

java中如何让Vaadin 10组件根据点击事件一一改变

2025年05月04日338sky-heaven

由于某种原因,组件总是通过同时单击按钮而更改。
我需要将它们一一更改。这是示例:

countButton.addClickListener(buttonClickEvent -> { 
    int input = Integer.parseInt(inputTextField.getValue()); 
 
    long factorialResult = countFactorial(input); 
    resultFactorialLabel.setText("Factorial: " + factorialResult); 
 
    //just for example, could be processing that takes really long 
    try { 
        sleep(1000); 
    } catch (InterruptedException ignored) { 
    } 
 
    int fibonacciResult = countFibonacci(input); 
    resultFibonacciLabel.setText("Fibonacci: " + fibonacciResult); 
}); 

当我运行它时 - 10秒过去了,然后 resultFactorialLabel 和 resultFibonacciLabel 同时更改,当我想要更改 resultFactorialLabel 时,然后在 10 秒内,更改 resultFibonacciLabel 。我该怎么做?
标签是如何同时改变的呢?

Vaadin 版本:10.0.1

请您参考如下方法:

这是通常的生命周期:

  • 事件发生在客户端(浏览器),例如单击按钮。
  • 这会向服务器(您的 Vaadin 应用程序)发出 HTTP 调用。
  • Vaadin 处理调用,在服务器上触发事件,即执行该事件的所有已注册监听器,例如你的点击监听器。
  • 在监听器中,您对(服务器端)组件进行一些更改,例如更新标签。
  • 之后,系统会向客户端发送一条响应,其中包含所有已更改组件的信息。
  • 然后,在客户端,HTML 会更新以反射(reflect)更改后的组件。

因此,如果您在监听器中执行sleep,它只会延迟对客户端的响应。

如果您需要执行由按钮单击触发的昂贵操作,您应该在后台线程中执行此操作,并在操作完成后更新 UI。请参阅docs了解如何从后台线程更新 UI。