Skip to main content Skip to local navigation

Java Graphics and User Interfaces -- in the Terminal

When I first started programming in Java I thought that graphics would be best with a framework like JavaFX. It was a lot more complicated than I thought it would be. I switched to using the Princeton Standard Library with my students and find that it works great for things like graphs, etc. even though it's not as capable as jFreeChart and other alternatives.

That said, I'd like to be able to get my students to put graphics in the terminal in a similar manner to how people use NCurses. With Java there are options like Laterna but I recently came across TamboUI and it looks very appealing, like this:

Tamboui graph example from the Tamboui website, https://tamboui.dev/docs/main/demos-widgets.html
Tamboui graph example from the Tamboui website, https://tamboui.dev/docs/main/demos-widgets.html

The Tamboui JAR files are available on the MVN Repository (0.4.0). I downloaded:

  1. The Widgets package.
  2. The TUI package.

Ah... that didn't work. So I went with the Java 25 example on the front screen, which require

and then suggested that I use jbang to execute the compiled Java code. So I installed that with

 brew install jbang

and compiled the code (after making sure that the two JAR files were in the same folder as my java source file):

javac -cp tamboui-toolkit-0.4.0.jar:tamboui-panama-backend-0.4.0.jar simpleexample.java

then I ran it with jbang:

and the result was:

executing tamboui example

I'm liking the markup text support! Plus, I hadn't used jbang before and like how it didn't require me to explicitly write out any of the dependencies when executing my Java program. Looks like a way to help my students reduce friction with running Java apps from the terminal. I'll have to try this out on Windows and Linux next.

Edits

July 7, 2026: added a link to Baeldung's page on jbang. Fixed spacing typo in last paragraph.


a pen

James Andrew Smith is a Professional Engineer and Associate Professor in the Electrical Engineering and Computer Science Department of York University’s Lassonde School, with degrees in Electrical and Mechanical Engineering from the University of Alberta and McGill University.  Previously a program director in biomedical engineering, his research background spans robotics, locomotion, human birth, music and engineering education. While on sabbatical in 2018-19 with his wife and kids he lived in Strasbourg, France and he taught at the INSA Strasbourg and Hochschule Karlsruhe and wrote about his personal and professional perspectives.  James is a proponent of using social media to advocate for justice, equity, diversity and inclusion as well as evidence-based applications of research in the public sphere. You can find him on Twitter.  You can find him on BlueSky. Originally from Québec City, he now lives in Toronto, Canada.