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: 10685

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

Allegro Reduces Kafka Producer Latency Outliers by 82% After Switching to XFS

Allegro experimented with different performance optimization options to improve Apache Kafka producer tail latency and eventually switched all its clusters to the XFS filesystem. The company used Kafka protocol sniffing, JVM profiling, and eBPF, which proved instrumental in identifying and eliminating performance bottlenecks.

By Rafal Gancarz

Presentation: Several Components are Rendering: Client Performance at Slack-Scale

Jenna Zeigen discusses front-end performance issues encountered by Slack as they continue to grow and evolve the desktop app.

By Jenna Zeigen

SSH Backdoor from Compromised XZ Utils Library

When Microsoft Engineer Andres Freund noticed SSH was taking longer than usual he discovered a backdoor in xz utils, one of the underlying libraries for systemd, that had taken years to be put in place. The backdoor had found its way into testing releases of Linux distributions like Debian Sid, Fedora 41 and Fedora Rawhide but was caught before propagating into more highly used stable releases.

By Chris Swan

For Practitioners, by Practitioners: Solve Your Software Challenges at InfoQ & QCon Software Events

Behind every InfoQ Dev Summit and QCon software development conference is a collective of distinguished senior software practitioners who carefully curate the topics based on the crucial trends and essential best practices you need to know about. These architects and leaders are charged with creating THE conference they would want to attend.

By Artenisa Chatziou

How Technology Can Drive Culture Change in Software Organisations

Technological improvements like containers, VMs, infrastructure-as-code, software-defined-networking, collaborative version control, and CI/CD can make it possible to fix cultural issues around organisational dynamics and bad product delivery. According to Nigel Kersten, software leaders should leverage tech to create positive changes in organisational dynamics and relationships between teams.

By Ben Linders

© 2024   Created by Michael Levin.   Powered by

Badges  |  Report an Issue  |  Terms of Service