JavaFX and SteelSeries gauges using FXML

Gerrit Grunwald, aka @hansolo_ on twitter, has just ported his Swing based gauges and meters framework known as SteelSeries to JavaFX as part of the JFXtras-lab project. I can't tell you how many times since Java AWT first came out, that I have had to use meters and gauges in an application. Also, I can't count how many times I have found a dearth of open source gauge frameworks out there in the wild. Needless to say, I have been watching Gerrit's progress for several months now.  Finally, he posted his work to jxftras-lab and I have been eagerly testing ever since.

One area I wanted to see is if Gerrit's gauges worked with JavaFX FXML. JavaFX FXML is an XML-based language that provides the structure for building a user interface separate from the application logic of your code. With the numerous options that Gerrit's gauges support, this is a must have. I am happy to report with a little back and forth with Gerrit over a few days, we now have a working version that supports FXML. You'll have to download and build the latest jfxtras-lab bits from github, here.

Here is an FXML snippet showing how to define a Radial gauge in FXML. This matches Gerrit's blog, showing the same settings using Java code, here.

<Radial fx:id="radialGauge" prefWidth="280" prefHeight="280" title="Temperature" >
  <unit>°C</unit>
  <lcdDecimals>2</lcdDecimals>
  <frameDesign>STEEL</frameDesign>
  <backgroundDesign>DARK_GRAY</backgroundDesign>
  <lcdDesign>STANDARD_GREEN</lcdDesign>
  <lcdDecimals>2</lcdDecimals>
  <lcdValueFont>LCD</lcdValueFont>
  <pointerType>TYPE14</pointerType>
  <valueColor>RED</valueColor>
  <knobDesign>METAL</knobDesign>
  <knobColor>SILVER</knobColor>
  <sections>
    <Section start="0" stop="37" color="lime"/>
    <Section start="37" stop="60" color="yellow"/>
    <Section start="60" stop="75" color="orange"/>
  </sections>
  <sectionsVisible>true</sectionsVisible>
  <areas>
    <Section start="75" stop="100" color="red"/>
  </areas>
  <areasVisible>true</areasVisible>
  <markers>
    <Marker value="30" color="magenta"/>
    <Marker value="75" color="aquamarine"/>
  </markers>
  <markersVisible>true</markersVisible>
  <threshold>40</threshold>
  <thresholdVisible>true</thresholdVisible>
  <glowVisible>true</glowVisible>
  <glowOn>true</glowOn>
  <trendVisible>true</trendVisible>
  <trend>RISING</trend>
  <userLedVisible>true</userLedVisible>
  <bargraph>true</bargraph>
  <radialRange>RADIAL_300</radialRange>
  <GridPane.rowIndex>0</GridPane.rowIndex>
  <GridPane.columnIndex>0</GridPane.columnIndex>
  <GridPane.halignment>CENTER</GridPane.halignment>
  <GridPane.valignment>CENTER</GridPane.valignment>
</Radial>

 

This produced the following display:

In FXML, you create a Java controller class. For this simple example, in the controller class, Gauge.java, I created a JavaFX Timeline that iterates from the minimum to the maximum value over 10 seconds, alternating with rising and falling values. The actual Radial Gauge is represented by the "radialGauge" member of the controller that is annotated with @FXML. This allows the FXML system to match the actual JavaFX Radial Control instance to the controller member variable based on the FXML"fx:id" attribute. The initialize method of the controller class is called once the FXML system has processed the XML and created all the JavaFX Nodes.

The main JavaFX application is contained in the class SteelFX and it loads the FXML file then assigns it to the JavaFX Scene.

 

The complete code is here:

SteelFX.java

Gauge.fxml

Gauge.java

 

Views: 10787

Comment

You need to be a member of Codetown to add comments!

Join Codetown

Happy 10th year, JCertif!

Notes

Welcome to Codetown!

Codetown is a social network. It's got blogs, forums, groups, personal pages and more! You might think of Codetown as a funky camper van with lots of compartments for your stuff and a great multimedia system, too! Best of all, Codetown has room for all of your friends.

When you create a profile for yourself you get a personal page automatically. That's where you can be creative and do your own thing. People who want to get to know you will click on your name or picture and…
Continue

Created by Michael Levin Dec 18, 2008 at 6:56pm. Last updated by Michael Levin May 4, 2018.

Looking for Jobs or Staff?

Check out the Codetown Jobs group.

 

Enjoy the site? Support Codetown with your donation.



InfoQ Reading List

Presentation: The Human Scalability Problem: Why Your Teams Don’t Scale Like Your Code

Charlotte de Jong Schouwenburg discusses the "human bottlenecks" of hyper-growth. While systems scale, human cooperation often breaks down due to communication overload and lost context. She shares proven tools for behavioral scalability - including communication architecture and "engineering trust" - to help leaders maintain high-performing, autonomous teams without sacrificing speed or culture.

By Charlotte de Jong Schouwenburg

Article: From Batch to Micro-Batch Streaming: Lessons Learned the Hard Way in a Delta Index Pipeline

This article describes how a production delta-index pipeline migrated from scheduled batch to micro-batch Spark Structured Streaming. It covers why record-level streaming was rejected, how partition-based watermarks replaced fragile S3 completion markers, overlap-window correctness, and restart-as-design strategies for better predictability in object-store–based ingestion systems.

By Parveen Saini

Podcast: Roq: Leveraging Quarkus to Build Static Sites at the Speed of Go

Andy Damevin, a developer who worked on Quarkus for almost a decade, talks about Roq. A project that started as an experiment to try to see if it’s possible to build a static web site generator on top of quarkus. He touches on the rationale for choosing Java and Quarkus, how to migrate to Roq, and the platform's future.

By Andy Damevin

DoorDash Used Copilot to Convert Its XCTest-Based iOS Test Suite to Swift Testing

Using Copilot along with strong reliability safeguards, DoorDash migrated their iOS XCTest-based test suite to Swift Testing, thus modernizing a large test suite quickly, safely, and with measurable performance gains, says DoorDash engineer Matheus Gois.

By Sergio De Simone

Java News Roundup: OpenJDK JEPs, GlassFish, Spring AI, JReleaser, A2A Java SDK, Google ADK, Gradle

This week's Java roundup for April 27th, 2026, features news highlighting: OpenJDK JEPs for JDK 27; the fifth milestone release of Spring AI 2.0; the second milestone release of GlassFish 9.0; point releases of Quarkus, JReleaser, Gradle, LangChain4j and Google ADK for Java; the second beta release of Hardwood; and the first beta release of A2A Java SDK 1.0.

By Michael Redlich

© 2026   Created by Michael Levin.   Powered by

Badges  |  Report an Issue  |  Terms of Service