German B4J: TabPane und TabPage-Content

Kiffi

Well-Known Member
Licensed User
Longtime User
Hallo,

ich habe eine TabPane mit drei TabPages. Jedes mal, wenn die TabPage wechselt, verschiebe ich mit AddNode ein WebView in das SelectedTab. Das funktioniert soweit ganz gut.

Was ich allerdings nicht hinbekomme ist, dass das WebView die volle Größe der TabPage annimmt (und sich dann auch demzufolge beim Resizen der Form mit vergrößert).

Hier der Code (ein simples Projekt habe ich diesem Posting hinzugefügt):

B4X:
#Region Project Attributes 
    #MainFormWidth: 1000
    #MainFormHeight: 800 
#End Region

Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private TabPane1 As TabPane
    Private WebView1 As WebView
End Sub

Sub AppStart (Form1 As Form, Args() As String)
   
    MainForm = Form1
    MainForm.RootPane.LoadLayout("MainLayout") 'Load the layout file.
    MainForm.Show
   
    WebView1.Initialize("WebView1")
   
    TabPane1.LoadLayout("EmptyLayout", "NewTab1")
    TabPane1.LoadLayout("EmptyLayout", "NewTab2")
    TabPane1.LoadLayout("EmptyLayout", "NewTab3")
   
End Sub

Sub TabPane1_TabChanged (SelectedTab As TabPage)
   
    SelectedTab.Content.RemoveAllNodes
   
    SelectedTab.Content.AddNode(WebView1, 0, 0, -1, -1)
   
    WebView1.LoadHtml(SelectedTab.Text)
   
End Sub

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

Danke im Voraus & Grüße ... Peter
 

Attachments

  • b4jTabTest.zip
    2.6 KB · Views: 223

MaFu

Well-Known Member
Licensed User
Longtime User
Die einfachste Methode wäre ein weiteres Layout nur mit dem WebView zu erstellen und dieses in den aktuellen Tab zu laden. Beispiel anbei.
 

Attachments

  • b4jTabTest_2.zip
    3.5 KB · Views: 220

Kiffi

Well-Known Member
Licensed User
Longtime User
Hi Manfred,

danke für Deine schnelle Hilfe!

Wenn ich das recht sehe, wird dann aber pro Tab eine WebView-Instanz geladen? Gerade das möchte ich nicht.

Nur eine WebView-Instanz, die dann zwischen den Tabs hin- und hergeschoben wird: Das wäre optimal.

Grüße ... Peter
 

RWK

Member
Licensed User
Dann musst Du das im Resize Event behandeln.

B4X:
Sub MainForm_Resize (Width As Double, Height As Double)
    WebView1.SetSize(TabPane1.Width,TabPane1.Height)   'irgend ne Größe
End Sub

Grüße
Rainer
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Hallo Rainer,

auch Dir vielen Dank für Deine Antwort!

SetSize() ist eine Option. Mittlerweile habe ich allerdings die AnchorPane für mich entdeckt (finde ich irgendwie JavaFXiger ;)):

B4X:
Sub Process_Globals
   
    Private fx As JFX
    Private MainForm As Form
    Private TabPane1 As TabPane
    Private WebView1 As WebView
       
End Sub

Sub AppStart (Form1 As Form, Args() As String)
   
    MainForm = Form1
    MainForm.RootPane.LoadLayout("MainLayout")
    MainForm.Show
   
    WebView1.Initialize("WebView1")
   
    AddTab("NewTab1")
    AddTab("NewTab2")
    AddTab("NewTab3")
   
End Sub

Sub AddTab(TabText As String)
   
    Dim myNewTabPage As TabPage
    myNewTabPage.Initialize
    myNewTabPage.Text = TabText
   
    Dim myNewAnchorPane As AnchorPane
    myNewAnchorPane.Initialize("")
    myNewTabPage.Content = myNewAnchorPane
   
    TabPane1.Tabs.Add(myNewTabPage)
   
End Sub

Sub TabPane1_TabChanged (SelectedTab As TabPage)

    Dim myAnchorPane As AnchorPane = SelectedTab.Content
   
    myAnchorPane.RemoveAllNodes
    myAnchorPane.AddNode(WebView1, 0, 0, -1, -1)
    myAnchorPane.SetAnchors(WebView1, 5, 5, 5, 5)

    WebView1.Loadhtml(SelectedTab.Text)

End Sub

Nochmals Danke für Eure Hilfe & Grüße ... Peter
 

Attachments

  • b4jTabTest.zip
    1.9 KB · Views: 242
Top