#Region Project Attributes
#MainFormWidth: 600
#MainFormHeight: 600
#End Region
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private xui As XUI
Private Button1 As B4XView
Private Spinner1 As Spinner
Private debounceTimer As Timer
Private lastValue As Object
Private debounceDelay As Int = 500 ' 防抖延迟500ms
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("Layout1")
MainForm.Show
' 初始化防抖计时器
debounceTimer.Initialize("debounceTimer", debounceDelay)
debounceTimer.Enabled = False
' 设置Spinner滚动事件
Dim jo As JavaObject = Spinner1
Dim e As Object = jo.CreateEventFromUI("javafx.event.EventHandler", "scroll", Null)
jo.RunMethod("setOnScroll", Array(e))
End Sub
Sub Button1_Click
xui.MsgboxAsync("Hello World!", "B4X")
End Sub
Private Sub Spinner1_ValueChanged (Value As Object)
' 存储最新的值
lastValue = Value
' 重置并启动防抖计时器
debounceTimer.Enabled = False
debounceTimer.Enabled = True
End Sub
Private Sub debounceTimer_Tick
debounceTimer.Enabled = False
HeavyJob(lastValue)
End Sub
Private Sub HeavyJob(Value As Object)
Log("执行HeavyJob,值: " & Value)
' 这里执行耗时的操作
Sleep(1000) ' 模拟耗时操作
Log("HeavyJob完成,值: " & Value)
End Sub
Sub Scroll_Event (MethodName As String, Args() As Object) As Object
Dim scrollevent As JavaObject = Args(0)
Dim DeltaY As Int = scrollevent.RunMethod("getDeltaY", Null)
If DeltaY > 0 Then
Spinner1.Value = Spinner1.Value + 5
Else
Spinner1.Value = Spinner1.Value - 5
End If
Return Null
End Sub