[HN Gopher] Show HN: Sierra, a DSL for building Java Swing appli...
       ___________________________________________________________________
        
       Show HN: Sierra, a DSL for building Java Swing applications
        
       Yes, I know hardly anyone uses Swing anymore. :-) I basically just
       did it for fun and thought I would share.
        
       Author : gk_brown
       Score  : 88 points
       Date   : 2023-01-01 20:40 UTC (2 days ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | Manjuuu wrote:
       | This looks nice, finally a good attempt at a java Swift UI, will
       | try it out.
        
         | gk_brown wrote:
         | Sierra is actually inspired by Lima, a UIKit DSL I created in
         | Swift before SwiftUI was announced:
         | 
         | https://github.com/HTTP-RPC/Lima
        
       | KronisLV wrote:
       | I really like the examples: a screenshot of what the thing looks
       | like, with a link to the corresponding source code right next to
       | it! I think all UI component frameworks (or DSLs, I guess) should
       | have something like that.
       | 
       | Some webdev libraries/frameworks have gone a step further and
       | include code in the same page (though maybe it could/should be
       | collapsed by default sometimes).
        
         | gk_brown wrote:
         | I generally prefer links since otherwise the code and examples
         | can easily get out of sync.
        
           | thewataccount wrote:
           | I really like this as a casual user that is going to just
           | scroll through the page and see what it looks like - I
           | wouldn't go out of my way to click on the examples.
           | 
           | This might be useful as an overview of what it is more then
           | live examples
        
       | jeffreportmill1 wrote:
       | This is very nice! It is easy to get lost in most raw Swing code,
       | but this seems to result in hierarchically defined code that
       | keeps nested UI elements in context. I can almost visualize the
       | resulting UI from the code.
        
       | Eumenes wrote:
       | Make Swing Great Again!
        
       | layer8 wrote:
       | It's nice to see new developments for Swing, however
       | _GroupLayout_ is the only layout manager I ever needed in
       | practice. Once you grok the combination of parallel /sequential
       | with horizontal/vertical, it's most flexible and quite intuitive,
       | and is also close to declarative in syntax.
        
       | Dirak wrote:
       | This is slightly off-topic, but this post makes me feel sincerely
       | nostalgic for building games in Eclipse and Swing back in the
       | day. Growing up, Notch's live streams[1] where he would code up a
       | game in Java Swing for Ludum Dare were one of my first exposures
       | to programming, and reasons for eventually studying CS. I wish
       | there were some modern alternative to Swing that would be as
       | simple as Swing, but would allow you to create games for the web.
       | 
       | [1] https://www.youtube.com/watch?v=4J_8HkQj9mU
        
         | t0astbread wrote:
         | It's not exactly the same but if you're looking for a simple
         | environment that lets you create games for the web, you should
         | check out the PICO-8: https://www.lexaloffle.com/pico-8.php
        
         | exabrial wrote:
         | Agree, swing was "terrible" because desktop programming is hard
         | (so many event sources!) but it contained a lot less footguns
         | than say, QT or GTK.
         | 
         | JavaFX is sorta the spiritual successor to swing. On linux, you
         | can actually run it straight from the framebuffer! (No
         | 'desktop' needed!)
         | 
         | There was also this discussion a long while back:
         | https://news.ycombinator.com/item?id=25121705 The project is
         | actively maintained and sees commits quite a bit! Might be what
         | you're looking for.
        
         | gk_brown wrote:
         | Have you looked into Flutter at all? I admit that I have not,
         | but I know it supports web development in addition to mobile
         | and desktop:
         | 
         | https://flutter.dev/multi-platform/web
        
       | phoronixrly wrote:
       | I'd use this every day in place of $JS-framework-of-the-day +
       | HTML + CSS, alas...
        
       | Pet_Ant wrote:
       | Was hoping this meant the resurrection of JavaFxScript/Visage:
       | https://en.wikipedia.org/wiki/JavaFX_Script#Syntax
        
       | xrrocha wrote:
       | This is reminiscent of JavaFX's original F3 formulation (aka
       | JavaFX Script): object literals reflecting the GUI visual
       | structure.
       | 
       | JavaFX started out as a Java library on top of Swing but the lack
       | of object literals and lambdas led to the creation of the F3
       | language (code-named _foo_ for  "funcional object-oriented").
       | 
       | Despite Java's progress since then its syntax still feels
       | somewhat rigid. Sierra looks very nice indeed. It could benefit
       | from a more fluid, less syntax-encumbered DSL laid on top of it
       | in Kotlin or Scala.
        
         | gk_brown wrote:
         | Thanks for the feedback. I did consider using Kotlin but wanted
         | to make sure it worked at least minimally in Java first.
        
           | xrrocha wrote:
           | Yeah, Implementing the framework as such in Java with no
           | other dependencies is a sound decision, imho.
           | 
           | Laying out a Kotlin DSL on top of it could be an excellent
           | opt-in feature to leverage the core in a more declarative way
        
       | tannhaeuser wrote:
       | > _Yes, I know hardly anyone uses Swing anymore._
       | 
       | Actually, Swing is the GUI toolkit used by IntelliJ IDEA, one of
       | the few if not the only commercially successful and kick-ass Java
       | desktop app(s).
        
         | neuronexmachina wrote:
         | For their next-gen Fleet IDE though, it looks like Jetbrains is
         | using Kotlin and Skia/skiko?
         | 
         | * https://blog.jetbrains.com/fleet/2022/01/fleet-below-deck-
         | pa...
         | 
         | *
         | https://twitter.com/jetbrains_fleet/status/14653112312717393...
         | 
         | * https://github.com/JetBrains/skiko
        
         | jeffreportmill1 wrote:
         | The only real problem with Swing is that there was never a
         | version 2. If it had been separated from AWT, updated some of
         | the APIs and given a modern look-and-feel, it would still be
         | relevant today. JavaFX is nice, but it broke too many
         | conventions.
         | 
         | And, of course, Oracle or OpenJDK (or someone) needed to invest
         | in a browser port of the JVM, which is totally possible these
         | days.
        
           | gk_brown wrote:
           | Take a look at FlatLAF:
           | 
           | https://github.com/JFormDesigner/FlatLaf
           | 
           | They have done a great job bringing a modern appearance to
           | the Swing components.
        
             | whartung wrote:
             | NetBeans switched to FlatLaf, and looks pretty good.
             | 
             | As I understand it, IDEA has done a lot of "Swing Work". I
             | don't know if it's just augmenting existing or creating a
             | bunch of new controls or if they delved deeper. It's just
             | my understanding that IDEA is Swing, but not as we know it.
             | I could be wrong.
             | 
             | NetBeans is pretty much pure Swing.
        
         | gk_brown wrote:
         | Agreed. I said as much in my response to this issue that was
         | opened the other day:
         | 
         | https://github.com/HTTP-RPC/Sierra/issues/12
        
       | kitd wrote:
       | This looks really cool. Applying a thin layer over parts of the
       | standard library is a very good idea IMO. Reduces the dependency
       | tree but a lot.
       | 
       | One question (my Swing knowledge is _at least_ 15 years old!):
       | what 's the simplest way to handle events using this? Eg taking
       | the FormTest [1] example, how might one simply bind a model
       | object to the UI elements?
       | 
       | [1] https://github.com/HTTP-RPC/Sierra/blob/master/sierra-
       | test/s...
        
         | gk_brown wrote:
         | Added an example demonstrating how to add an action listener to
         | a button:
         | 
         | https://github.com/HTTP-RPC/Sierra/blob/master/sierra-test/s...
         | 
         | I'm not sure it's _exactly_ what you were looking for, but
         | hopefully it is similar enough.
        
           | kitd wrote:
           | That's great! As I say, my swing experience is very old and
           | it's probably just a case of remembering the basic action
           | framework more than anything else.
           | 
           | But that fits in very nicely with how your library works
           | using _with()_.
        
         | gk_brown wrote:
         | Great question. You can do this with a cell consumer (i.e. the
         | with() method). See OrientationTest for an example (e.g.
         | leftToRightButton, rightToLeftButton):
         | 
         | https://github.com/HTTP-RPC/Sierra/blob/master/sierra-test/s...
         | 
         | I should probably add a better example.
        
       ___________________________________________________________________
       (page generated 2023-01-03 23:01 UTC)