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?
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().
Great question. You can do this with a cell consumer (i.e. the with() method). See OrientationTest for an example (e.g. leftToRightButton, rightToLeftButton):
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.
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.
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.
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.
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
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.
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).
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
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.
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.
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...