B4J Question [SOLVED] Tick beside menu option at JSystray - TrayIcon ?

Magma

Expert
Licensed User
Longtime User
Hi there...

is it possible to have tick beside a menu option at tray icons like these or more simple... any idea?

1661326799764.png


Thanks for your answers !!!
 
Solution
1661349318598.png


B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private tray As SystemTray
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
    tray.Initialize
    Dim ti As TrayIcon
    ti.Initialize("ti", xui.LoadBitmap(File.DirAssets, "45973.jpg"), Null)
    tray.AddTrayIcon(ti)
    Dim PopupMenu As JavaObject
    PopupMenu.InitializeNewInstance("java.awt.PopupMenu", Null)
    Dim listener As Object = PopupMenu.CreateEventFromUI("java.awt.event.ItemListener", "MenuItemStateChanged", Null)
    For Each s As String In...

Erel

B4X founder
Staff member
Licensed User
Longtime User
1661349318598.png


B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private tray As SystemTray
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
    tray.Initialize
    Dim ti As TrayIcon
    ti.Initialize("ti", xui.LoadBitmap(File.DirAssets, "45973.jpg"), Null)
    tray.AddTrayIcon(ti)
    Dim PopupMenu As JavaObject
    PopupMenu.InitializeNewInstance("java.awt.PopupMenu", Null)
    Dim listener As Object = PopupMenu.CreateEventFromUI("java.awt.event.ItemListener", "MenuItemStateChanged", Null)
    For Each s As String In Array("Item 1", "Item 2", "Item 3")
        Dim MenuItem As JavaObject
        Dim Checked As Boolean = True
        MenuItem.InitializeNewInstance("java.awt.CheckboxMenuItem", Array(s, Checked))
        MenuItem.RunMethod("addItemListener", Array(listener))
        PopupMenu.RunMethod("add", Array(MenuItem))
    Next
    ti.As(JavaObject).RunMethod("setPopupMenu", Array(PopupMenu))
End Sub

Private Sub MenuItemStateChanged_Event (MethodName As String, Args() As Object) As Object
    Dim ItemEvent As JavaObject = Args(0)
    Dim MenuItem As JavaObject = ItemEvent.RunMethod("getItemSelectable", Null)
    Dim Text As String = MenuItem.RunMethod("getLabel", Null)
    Dim checked As Boolean = MenuItem.RunMethod("getState", Null)
    Log(Text & ": " & checked)
    Return Null
End Sub
 
Upvote 0
Solution

Erel

B4X founder
Staff member
Licensed User
Longtime User
BTW, these two lines deserve some attention:
B4X:
 Dim Checked As Boolean = True
 MenuItem.InitializeNewInstance("java.awt.CheckboxMenuItem", Array(s, Checked))
This is an example of a "self documenting code".

It is much more maintainable and more clear than:
B4X:
 MenuItem.InitializeNewInstance("java.awt.CheckboxMenuItem", Array(s, True))
The other reasonable option is:
B4X:
 MenuItem.InitializeNewInstance("java.awt.CheckboxMenuItem", Array(s, True)) 'last parameter sets the initial checked state.

I prefer the first option.
 
Upvote 0
Top