B4J Question Add OnCloseRequest Tab Event

Fabrice La

Active Member
Licensed User
Longtime User
I would like to add existing event for tab in TabPane "OnCloseRequest".

How I can do it ?

I saw something like this
B4X:
JO.RunMethod("setTabClosingPolicy", Array("SELECTED_TAB"))
    Dim ev As Object = JO.CreateEventFromUI("javafx.collections.ListChangeListener", "TabsResultChanged", Null)
    JO.RunMethodJO("getTabs", Null).RunMethod("addListener", Array(ev))
Specific for tabpane to create a new event
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
B4X:
Sub Process_Globals
   Private fx As JFX
   Private MainForm As Form
   Private TabPane1 As TabPane
End Sub

Sub AppStart (Form1 As Form, Args() As String)
   MainForm = Form1
   MainForm.RootPane.LoadLayout("1")
   MainForm.Show
   TabPane1.LoadLayout("2", "Tab 1")
   TabPane1.LoadLayout("2", "Tab 2")
   Dim jo As JavaObject = TabPane1
   jo.RunMethod("setTabClosingPolicy", Array("ALL_TABS"))
   Dim ev As Object = jo.CreateEventFromUI("javafx.collections.ListChangeListener", "TabsListChanged", Null)
   jo.RunMethodJO("getTabs", Null).RunMethod("addListener", Array(ev))
   For Each t As TabPage In TabPane1.Tabs
     Dim jo As JavaObject = t
     Dim ev2 As Object = jo.CreateEvent("javafx.event.EventHandler", "OnCloseRequest", Null)
     jo.RunMethod("setOnCloseRequest", Array(ev2))
   Next
End Sub

Sub OnCloseRequest_Event (MethodName As String, Args() As Object) As Object
   Dim e As Event = Args(0)
   Dim jo As JavaObject = e
   Dim page As TabPage = jo.RunMethod("getSource", Null)
   Log("OnCloseRequest: " & page.Text)
   'consume the event to prevent it from closing
   e.Consume
   Return Null
End Sub

Sub TabsListChanged_Event (MethodName As String, Args() As Object) As Object
   Dim jo As JavaObject = Args(0)
   jo.RunMethod("next", Null)
   Dim removed As List = jo.RunMethod("getRemoved", Null)
   Dim tp As TabPage = removed.Get(0)
   Log($"Tab: ${tp.Text} removed."$)
   Return Null
End Sub
 
Upvote 0
Top