B4J Tutorial FlipClock

It comes from here. Not sure that I have it 100% correct - maybe some members can improve on this.

Jar attached - copy it to your B4J additional libs folder.

Have also added the Java code and the resources folder.

1758972357812.png


Sample Code:

Sample Code:
#Region Project Attributes
    #MainFormWidth: 800
    #MainFormHeight: 600
#End Region

#AdditionalJar: FlipClock

Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private xui As XUI
    Dim WEEK_DAYS(7) As String
    Dim MONTHS(12) As String
    Dim dayLeft, dayMid, dayRight, dateLeft, dateRight, monthLeft, monthMid, monthRight, hourLeft, hourRight, minLeft, minRight, secLeft, secRight As JavaObject
    Dim dayLeftB, dayMidB, dayRightB, dateLeftB, dateRightB, monthLeftB, monthMidB, monthRightB, hourLeftB, hourRightB, minLeftB, minRightB, secLeftB, secRightB As JavaObject
    Dim fliptime As Double
    
    Dim t As Timer

End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1")
    MainForm.Show
    
    t.Initialize("t", 500)
    
    fliptime = 300
    WEEK_DAYS = Array As String("SUN","MON","TUE","WED","THU","FRI","SAT")
    MONTHS = Array As String("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC")
    
    dayLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    dayLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    dayLeft = dayLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(dayLeft.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)) _
    .RunMethodJO("withFixture", Array(True)) _
    .RunMethodJO("wordMode", Array(True)) _
    .RunMethodJO("darkFixture", Array(False)) _
    .runMethodJO("squareFlaps", Array(True)) _
    .RunMethodJO("flapColor", Array(fx.Colors.Green)) _
    .RunMethodJO("keepAspect", Array(True)) _
    .RunMethod("build", Null)
    
    dayMid.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    dayMidB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    dayMid = dayMidB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(dayMid.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    dayRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    dayRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    dayRight = dayRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(dayRight.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)

    dateLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    dateLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    dateLeft = dateLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(dateLeft.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)

    dateRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    dateRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    dateRight = dateRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(dateRight.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    monthLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    monthLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    monthLeft = dateLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(monthLeft.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)
    
    monthMid.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    monthMidB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    monthMid = monthMidB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(monthMid.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    monthRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    monthRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    monthRight = monthRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(monthRight.GetField("ALPHANUMERIC"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    hourLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    hourLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    hourLeft = hourLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(hourLeft.GetField("TIME_0_TO_5"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)

    hourRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    hourRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    hourRight = hourRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(hourRight.GetField("TIME_0_TO_9"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    minLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    minLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    minLeft = minLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(minLeft.GetField("TIME_0_TO_5"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)

    minRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    minRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    minRight = minRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(minRight.GetField("TIME_0_TO_9"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)


    secLeft.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    secLeftB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    secLeft = secLeftB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(secLeft.GetField("TIME_0_TO_5"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)

    secRight.InitializeNewInstance("eu.hansolo.enzo.splitflap.SplitFlap", Null)
    secRightB.InitializeStatic("eu.hansolo.enzo.splitflap.SplitFlapBuilder")
    secRight = secRightB.RunMethodJO("create", Null).RunMethodJO("flipTime", Array(fliptime)).RunMethodJO("selection", Array(secRight.GetField("TIME_0_TO_9"))).RunMethodJO("textColor", Array(fx.Colors.Black)).RunMethod("build", Null)
    
    MainForm.RootPane.AddNode(dayLeft,2dip, 2dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(dayMid,53dip, 2dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(dayRight,104dip, 2dip, 50dip, 50dip)
    
    MainForm.RootPane.AddNode(dateLeft,165dip, 2dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(dateRight,216dip, 2dip, 50dip, 50dip)
    
    MainForm.RootPane.AddNode(monthLeft,287dip, 2dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(monthMid,338dip, 2dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(monthRight,389dip, 2dip, 50dip, 50dip)
    
    MainForm.RootPane.AddNode(hourLeft, 2dip, 60dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(hourRight, 53dip, 60dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(minLeft, 104dip, 60dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(minRight, 155dip, 60dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(secLeft, 206dip, 60dip, 50dip, 50dip)
    MainForm.RootPane.AddNode(secRight, 257dip, 60dip, 50dip, 50dip)
    
    setDateTime
    Sleep(0)
    t.Enabled = True
    
End Sub


Sub  t_tick
    
    setDateTime
    
End Sub

Sub setDateTime
    
    dayLeft.RunMethod("setTextColor",Array(fx.Colors.Cyan))
    dayMid.RunMethod("setTextColor",Array(fx.Colors.Cyan))
    dayRight.RunMethod("setTextColor", Array (fx.Colors.Cyan))
    
    dateLeft.RunMethod("setTextColor",Array(fx.Colors.Blue))
    dateRight.RunMethod("setTextColor",Array(fx.Colors.Blue))
    
    
    Dim mnth As Int = DateTime.GetMonth(DateTime.Now)
    Dim month As String  = (MONTHS(mnth-1))
    monthLeft.RunMethod("setText", Array(month.SubString2(0,1)))
    monthMid.RunMethod("setText", Array(month.SubString2(1,2)))
    monthRight.RunMethod("setText", Array(month.SubString(2)))
    
    monthLeft.RunMethod("setTextColor", Array(fx.Colors.Red))
    monthMid.RunMethod("setTextColor", Array(fx.Colors.Red))
    monthRight.RunMethod("setTextColor", Array(fx.Colors.Red))
    
    hourLeft.RunMethod("setTextColor", Array(fx.Colors.Yellow))
    hourRight.RunMethod("setTextColor", Array(fx.Colors.Yellow))
    
    minLeft.RunMethod("setTextColor", Array(fx.Colors.Green))
    minRight.RunMethod("setTextColor", Array(fx.Colors.Green))
    
    secLeft.RunMethod("setTextColor", Array(fx.Colors.Magenta))
    secRight.RunMethod("setTextColor", Array(fx.Colors.Magenta))

    
    

    Dim hr As String = DateTime.GetHour(DateTime.Now)
    If hr.Length < 2 Then hr = "0" & hr
    Dim minute As String = DateTime.GetMinute(DateTime.Now)
    If minute.Length < 2 Then minute = "0" & minute
    Dim second As String = DateTime.GetSecond(DateTime.Now)
    If second.Length < 2 Then second = "0" & second
    
    hourLeft.RunMethod("setText", Array(hr.SubString2(0,1)))
    hourRight.RunMethod("setText", Array(hr.SubString(1)))
    
    minLeft.RunMethod("setText", Array(minute.SubString2(0,1)))
    minRight.RunMethod("setText", Array(minute.SubString(1)))
    
    secLeft.RunMethod("setText", Array(second.SubString2(0,1)))
    secRight.RunMethod("setText", Array(second.SubString(1)))
    
    Dim weekday As Int  = DateTime.GetDayOfWeek(DateTime.Now)
    dayLeft.RunMethod("setText", Array(WEEK_DAYS(weekday - 1).SubString2(0,1)))
    dayMid.RunMethod("setText", Array(WEEK_DAYS(weekday - 1).SubString2(1,2)))
    dayRight.RunMethod("setText", Array(WEEK_DAYS(weekday - 1).SubString(2)))
    
    Dim monthday As String = DateTime.GetDayOfMonth(DateTime.Now)
    If monthday.Length < 2 Then monthday = "0" & monthday
    dateLeft.RunMethod("setText", Array(monthday.SubString2(0,1)))
    dateRight.RunMethod("setText", Array(monthday.SubString(1)))
    

    Log(hr & " " & minute & " " & second)
End Sub
 

Attachments

  • FlipClock.jar
    91.9 KB · Views: 5
  • b4jFlipClock.zip
    2.9 KB · Views: 6
  • src.zip
    44.9 KB · Views: 4
  • resources.zip
    21.5 KB · Views: 5

Johan Schoeman

Expert
Licensed User
Longtime User
Please, remember: I am ALWAYS right (except when I'm wrong 🤣 ).


CTRL + SHIFT + S
Maybe I should try it sometime. I am a dumb IT dummy. Hard to teach old dogs new tricks....
 

Johan Schoeman

Expert
Licensed User
Longtime User
You're a kid! I'll be 65 on October 11th (and I'm writing this here so there's a chance someone will wish me a happy birthday 😁).

Come on, it's simple, install ShareX, check out the keyboard shortcuts and go!

(Sorry, it's italian)

View attachment 167360
One day when I have time to do so. Not today. Run the project and see what you see. Edit it, change it, recompile (SLC) it and post your update.
 
Top