B4J Question Sorting Tableview custom columns

jayel

Active Member
Licensed User
Longtime User
Hello,

I had to use a wraplabel to show my text in a tableview because I want to align my data in the cells.
But now when I click the header column to do the sort, the sorting is not done.
B4X:
Sub WrapLabel(lbl As Label, Alignment As String) As Pane
   Dim pn1 As AnchorPane
   pn1.Initialize("")
   pn1.AddNode(lbl, 0, 0, -1, -1)
   pn1.FillHorizontally(lbl, 0, 0)
   Dim jo1 = lbl As JavaObject
   jo1.RunMethod("setAlignment", Array As Object(Alignment))
   Return pn1
End Sub
Sub FillArmTable()
    tblArm.Items.Clear
    Dim rs As ResultSet
    rs = sqlUurrooster.ExecQuery("select * from tblalarm_arm order by id")
    Do While rs.NextRow
        Dim row(5) As Object
        Dim lblId As Label
        lblId.Initialize("")
        lblId.Text = rs.GetString("id")
        row(0) = WrapLabel(lblId, "CENTER_RIGHT")
        Dim lbltijdUurrooster As Label
        lbltijdUurrooster.Initialize("")
        lbltijdUurrooster.Text = rs.GetString("uurroostertijd")
        row(1) = WrapLabel(lbltijdUurrooster, "CENTER")
        Dim tblTijdZone1 As Label
        tblTijdZone1.Initialize("")
        tblTijdZone1.Text = rs.GetString("tijd_zone1")
        row(2) = WrapLabel(tblTijdZone1, "CENTER_RIGHT")
        Dim tblTijdZone2 As Label
        tblTijdZone2.Initialize("")
        tblTijdZone2.Text = rs.GetString("tijd_zone2")
        row(3) = WrapLabel(tblTijdZone2, "CENTER_RIGHT")
'        'the second item will be later edited by the user. To allow it to be updated we use a label.
'        Dim btnDeleteArm As Button
'        btnDeleteArm.Initialize("btnDeleteArm")
'        btnDeleteArm.Text = "Wis"
'        btnDeleteArm.Font = fx.DefaultFont("10")
'        btnDeleteArm.SetSize(35,7)
'     
'        row(4) = btnDeleteArm
     
     
        tblArm.Items.Add(row)
     
     
    
    Loop
    rs.Close
 
End Sub

Is this because I use a wraplabel?

Greets John
 
Last edited:

jayel

Active Member
Licensed User
Longtime User
Erel, next question.
Is there a way that the sorting can be done?
I have found a sorting mechanism with a list.
But can I catch the header click of the columns?

John
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Here:
B4X:
  TableView1.SetColumnSortable(0, False)
   For i = 1 To 100
     TableView1.Items.Add(Array(i, i, i))
   Next
   Dim r As Reflector
   r.Target = TableView1
   r.AddEventFilter("TableView1MouseClicked", "javafx.scene.input.MouseEvent.MOUSE_CLICKED")
End Sub

Sub TableView1MouseClicked_Filter(e As Event)
   Dim jo As JavaObject = e
   Dim v As Node = jo.RunMethod("getTarget", Null)
   Do While v.IsInitialized
     If GetType(v) = "com.sun.javafx.scene.control.skin.TableColumnHeader" Then
       jo = v
       Dim TableColumn As JavaObject = jo.RunMethod("getTableColumn", Null)
       Dim text As String = TableColumn.RunMethod("getText", Null)
       Log($"Clicked on ${text}"$)
       e.Consume   
       Return
     End If
     v = v.Parent
   Loop
   
End Sub
 
Upvote 0

jayel

Active Member
Licensed User
Longtime User
Where can I found the reflector library?
I use the one from B4A but it doesn't have "addeventfilter" member!
 
Upvote 0

jayel

Active Member
Licensed User
Longtime User
Works Erel, I have detected the columnheader click and refilled my table with the order clause.
Next question, can I add a arrow icon on the header columns?
 
Upvote 0
Top