B4J Code Snippet TabPane Closing Policy TabPages

Discussion in 'B4J Code Snippets' started by rwblinn, Apr 16, 2018.

Similar threads

B4J Tutorial TabPane Example
B4J Question TabPane & TabPage : How do i create a layout by code?
B4J Question Tab Color
B4J Tutorial Pagination Container
B4J Tutorial Accordion container
  1. rwblinn

    rwblinn Well-Known Member Licensed User

    Have been looking to handle closure and showing of TabPages added to a TabPane.
    This snippet shows a solution using the TabPane Closing Policy.
    The JavaObject library is used to access API methods for the TabPane.

    upload_2018-4-16_9-11-32.png

    Example attached.

    Code:
    'B4J HowTo - TabPane Closing Policy
    'Add a cross to be able to close a tab and handle the selected tab closing event.
    'Policies: ALL_TABS, SELECTED_TAB, UNAVAILABLE.
    'Test example uses 4 layouts with policy ALL_TABS and a button to show Tab 3 (index 2) again after being closed.
    'An array of tabpages is used to handle closure and showing again of the tabs defined.

    Sub Process_Globals
       
    Private fx As JFX
       
    Private MainForm As Form
       
    Private TabPane1 As TabPane
       
    Private TabPages(4As TabPage
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
       MainForm = Form1
       MainForm.RootPane.LoadLayout(
    "Main")
       MainForm.Title = 
    "B4J HowTo - TabPane Closing Policy"
       
    ' Set the tabpane tab closing policy - must be prior loading the tab layouts
       TabPane_SetTabClosingPolicy(TabPane1, "ALL_TABS")
    '   TabPane_SetTabClosingPolicy(TabPane1, "SELECTED_TAB")
    '   TabPane_SetTabClosingPolicy(TabPane1, "UNAVAILABLE")   'Default
       ' Add the tab layouts - the array is used to set the tabpage id and the tag toindicate if the tab is visible (1) or hidden (0)
       TabPages(0) = TabPane1.LoadLayout("Tab1""Tab 1")
       TabPages(
    0).Id = 0
       TabPages(
    0).Tag = 1
       TabPages(
    1) = TabPane1.LoadLayout("Tab2""Tab 2")
       TabPages(
    1).Id = 1
       TabPages(
    1).Tag = 1
       TabPages(
    2) = TabPane1.LoadLayout("Tab3""Tab 3")
       TabPages(
    2).Id = 2
       TabPages(
    2).Tag = 1
       TabPages(
    3) = TabPane1.LoadLayout("Tab4""Tab 4")
       TabPages(
    3).Id = 3
       TabPages(
    3).Tag = 1
       
    ' Add the eventhandler for closing a tab to each of the tabpages
       For Each tp As TabPage In TabPane1.Tabs
           
    Dim joTP As JavaObject = tp
           
    Dim oTP As Object = joTP.CreateEvent("javafx.event.EventHandler","TabPane_Tools_Close",False)
           joTP.RunMethod(
    "setOnClosed",Array(oTP))
       
    Next
       MainForm.Show
    End Sub

    ' Return true to allow the default exceptions handler to handle the uncaught exception.
    Sub Application_Error (Error As Exception, StackTrace As StringAs Boolean
       
    Return True
    End Sub

    ' Handle changing a tab
    Sub TabPane1_TabChanged (SelectedTab As TabPage)
       
    If SelectedTab.IsInitialized Then Log($"Tab Selected: ${SelectedTab.Text}"$)
    End Sub

    ' Set the closing policy of a tabpane
    ' Pane - Tabpane
    ' Policy - ALL_TABS, SELECTED_TAB, UNAVAILABLE
    Sub TabPane_SetTabClosingPolicy(Pane As TabPane, Policy As String)
       
    Dim joTP As JavaObject = Pane
       
    Dim joTCP As JavaObject
       joTCP.InitializeStatic(
    "javafx.scene.control.TabPane.TabClosingPolicy")
       
    If Policy.Length = 0 Then Policy = "ALL_TABS"
       joTP.RunMethod(
    "setTabClosingPolicy"Array(joTCP.GetField(Policy.ToUpperCase)))
    End Sub

    ' Handle closing a tab by clicking on the cross
    ' The id (or the text) can be used to determine which tab is closed.
    ' Set the tag to 0 again to indicate the tab is hidden
    Sub TabPane_Tools_Close_Event(EventName As String,Args() As Object) As Object
       
    Dim CEventJO As JavaObject = Args(0)
       
    Dim tp As TabPage = CEventJO.RunMethodJO("getSource",Null)
       TabPages(tp.id).Tag = 
    0
       
    Log($"Closed Tab with ID ${tp.id} and text '${tp.Text}' (#Tabs ${TabPane1.Tabs.size})."$' Closed Tab with ID 2 and text 'Tab 3' (#Tabs 3).
       Return False
    End Sub

    ' Example showing Tab 3 again.
    ' The Tab 3 is inserted right from the selected tab, i.e. if tab selected index is 0 then Tab 3 is inserted at 1 etc.
    ' Set the tag to 1 again to indicate the tab is visible
    Sub Button_ShowTab3_Click
       
    ' Tab is visible = do nothing
       If TabPages(2).Tag = 1 Then Return
       
    ' Insert the tab again and set the tag to 1
       TabPane1.Tabs.InsertAt(TabPane1.SelectedIndex + 1, TabPages(2))
       TabPages(
    2).Tag = 1
       
    Log($"Tab with ID ${TabPages(2).id} and text '${TabPages(2).Text}' inserted (#Tabs ${TabPane1.Tabs.size})."$)
    End Sub
     

    Attached Files:

    BPak, Erel, Kiffi and 1 other person like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice