Codetown ::: a software developer's community
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:
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.
Created by Michael Levin Dec 18, 2008 at 6:56pm. Last updated by Michael Levin May 4, 2018.
Check out the Codetown Jobs group.

Netflix engineer Casey Bleifer shares how to achieve rapid, automated code changes across a massive, diverse software fleet. She discusses building an event-driven orchestration platform using composable, Lego-like steps, and explains how Netflix utilizes automated canary validation, compliance checks, and a custom "confidence metric" to eliminate the long tail of manual engineering migrations.
By Casey Bleifer
IBM and HashiCorp have announced new LDAP secrets management capabilities in IBM Vault Enterprise 2.0, introducing a redesigned architecture to manage LDAP credentials, support password rotation, and automate the identity lifecycle.
By Craig Risi
Microsoft used their Build 2026 event to announce new functionality for Microsoft Foundry. Citing Foundry as "the place where AI agents move from experiments to production systems," in a blog post, Nick Brady writes that the release brings “runtime, tools, memory, grounding, models, observability, and governance” that developers need for production agents, rather than just new model endpoints.
By Matt Saunders
Amazon Web Services has recently announced the general availability of the next generation of Amazon OpenSearch Serverless, with a redesigned architecture that enables 20 times faster resource provisioning than the previous serverless architecture, true scale-to-zero capability, and up to 60% lower cost than a provisioned cluster for peak loads.
By Gianmarco Nalin
Pinterest introduced MIQPS, a URL normalization system that identifies which query parameters affect page identity using rendered content fingerprints. It reduces duplicate processing across millions of domains by replacing rule-based approaches with offline analysis, anomaly detection, and runtime parameter maps, improving ingestion efficiency and scalability in large-scale content pipelines.
By Leela Kumili
© 2026 Created by Michael Levin.
Powered by
You need to be a member of Codetown to add comments!
Join Codetown