A Veteran JFC/Swing Developer Makes the Leap to JavaFX Script

A Veteran JFC/Swing Developer Makes the Leap to JavaFX Script

ver since the Internet emerged, developers and the user community have tried tirelessly to lend Internet application interfaces the same interactivity their desktop applications offered. As the Internet evolved, client-side scripting languages such as JavaScript allowed developers to add dynamic behavior to browser-based applications. However, because different browsers handle JavaScript differently, creating complicated JavaScript code that works across all browsers has been difficult.

Sun Microsystems recently offered Java developers a solution to this challenge with a new scripting language called JavaFX Script. Applications built in JavaFX Script can run on the Internet, the desktop, or even on mobile devices. Unlike predecessors such as applets that tried to accomplish the same cross-platform functionality, JavaFX Script is built from the ground up with performance in mind. Its GUI components and back-end application objects are implemented in Java, and JavaFX Script code is used only to create such components, configure them, and wire them together. Also, because it’s built around the Java language, JavaFX Script inherits great Java features for building large-scale reusable code such as packaging and importing.

For seasoned Java programmers who heretofore have relied on Java Foundation Classes (JFC)/Swing for building GUIs and adding rich graphics functionality to their Java applications, learning JavaFX Script is a no-brainer. This article introduces JavaFX Script language fundamentals, making comparisons to JFC wherever applicable.

Language Fundamentals
JavaFX Script provides two flavors of syntax: declarative and procedural. The declarative syntax is a simple list of human-readable commands, whereas the procedural syntax takes the form of simple programs with curly braces. Both syntaxes are interpreted at run time.

The following are some other notable JavaFX Script fundamentals:

  1. You must store all JavaFX Script files with the extension .fx.
  2. You can use System.out.println from Java to print debug statements to the screen.
  3. Statements inside curly braces ({ }) are executed, even if they are within double quotes (“”).

JavaFX Script provides four primitive data types, which you declare using var: String, Boolean, Number, and Integer. Each data type is tied to a corresponding Java Foundation Class. Hence you can access all the methods provided in the corresponding Java class from JavaFX Script as follows:

var str:String="World" //all methods of java.lang.String //class are available for strstr.substring(1);  // yields "World";

JavaFX Script also introduces cardinality notation while declaring variables:

  • A question mark (?) corresponds to optional cardinality.
  • A plus sign (+) corresponds to one or more cardinality.
  • An asterisk (*) corresponds to zero or more cardinality.

Here are examples of ? and *:

var txt: String?; //txt takes any value or optionally        //nullvar myArr:Number* = [1,2,3] // same as var myArr=[1,2,3]

Functions Versus Operations
JavaFX Script offers both function and operation keywords. Functions usually are simple statements without complicated logic, while operations could have complex logic with exception handling. Use operations for writing complex APIs and functions for simple arithmetic functions.

Arrays
Arrays in JavaFX Script have many enhanced features compared with arrays in other languages. The accompanying source code contains a working example (Array.fx) to demonstrate the array features such as INSERT, DELETE, and SELECT provided by JavaFX Script.

The syntax and semantics of JavaFX Script arrays are so close to human-readable text that you can almost read them like an instruction manual:

var myarr = [11,12,13]Insert 10 as first into myarr;Insert 14 as last into myarr;Insert 9 before myarr[0];Insert 15 after myarr[. ==14]

You can obtain implicit access to context objects using a dot operator as follows:

var nums = [1,2,3,4,11,13,14];var valsGreaterThanEleven = nums[. > 11]; System.out.println("valsGreaterThanEleven = {valsGreaterThanEleven}"); 

The dot in the above code corresponds to the array object nums. The built-in functions do the comparison and return all values greater than 11.

The most intriguing feature of JavaFX Script arrays, however, is the ability to query them using select statements. Using a SELECT query to retrieve data from an array is similar to retrieving data from a relational database:

var ans2 = select n from n in [1,2,3,4,5] where n % 2 ==0;System.out.println("ans2={ans2}");//the above snippet prints all the even numbers from the array. 

See Listing 1. Array.fx for all the code related to JavaFX Script arrays. The code is easy to read and understand.

New Operators in JavaFX Script
Along with standard arithmetic and relational operators, JavaFX Script provides two new operators: format as and bind. The format as operator’s function is pretty straightforward:

var v_int =42545;var v_format= v_int.intValue() format as <<'$'###,###.##>>;System.out.println("v_format={v_format}"); //displays $42,545

The Bind operator lets you bind two variable values. For example, you could bind the text of a label to a variable so that anytime the value of the variable changes, the change is reflected in the text of the label as well. Think of the bind functionality like plugging formulas into spreadsheet cells. The cells display values that are based on a formula.

Multithreading in JavaFX Script
No scripting language supported multithreading until JavaFX Script came along. It supports multithreading with the unlikely programming keywords “do” and “do later”. JavaFX Script will run/interpret any code inside the do block with a separate execution thread. How you use these multithreading features in GUI development is up to your imagination. An intelligent application of them would be designing GUIs so they don’t hang up by making part of the code execute in parallel.

User-Defined Classes
JavaFX Script lets you define your own classes. It supports complete data encapsulation, adhering to the standard rules of Java encapsulation. So you can use all the data encapsulation keywords (private, protected, default and public).

JavaFX Script also supports multiple inheritance. In Listing 2. Class.fx for example, SubClass1 extends directly from SuperClass1 and SuperClass2. Interestingly, JavaFX Script does not support declaration and initialization of class attributes at the same time. However, you could initialize the attributes outside the class declaration using the attribute ClassName.attrName.

Though JavaFX Script does not support the constructor concept, it provides a trigger concept that lets you do some initial processing during object initialization:

class Foo {              attribute bar: String;}trigger on new Foo {bar = "foobar";}

In the above code snippet whenever a new object of class Foo is created, the trigger is invoked, initializing the value “foobar” to the variable bar.

The GUI Features
JavaFX Script greatly simplifies the coding needed to develop rich Internet applications. All the Swing components and containers are available in JavaFX Script, along with their default content layout managers. The runtime library javafxrt.jar contains all the Java classes that interact with underlying Java components. The implementation details are beyond the scope of this article, but avid architects could look into javafxrt.jar to find out how the factory patterns are used to instantiate the underlying JDK classes at runtime.

The GUI Components
All the AWT/Swing components are available in JavaFX Script, and except for the layout managers they carry the same naming conventions. You call JavaFX components as widgets, similar to the x-windows naming convention. Within JavaFX Script, all widgets inherit from the base Widget class. The Widget class in turn has a read-only reference to the underlying Java component class using generics.

In JavaFX Script, you could instantiate a Label component using the following code:

Label {      text: "Hello World Label"        }

Even though the width and height attributes of the label can be set, the underlying layout manager controls how the label is displayed.

Similarly you could initialize a Button using this code:

Button {	     text: "I'm a button!"	     mnemonic: I	     action: operation() {	     System.out.println("button clicked..");	     }      }

These simple lines implement the complete button functionality (refer to FrontendSample1.fx for a complete example of GUI components).

Besides the attributes defined in the above snippet, the following self-explanatory attributes also are available for the Button class:

  • Icon
  • selectedIcon
  • pressedIcon
  • rolloverIcon
  • rolloverSelectedIcon
  • rolloverEnabled
  • disabledIcon
  • disabledSelectedIcon

By default whenever you create a Button, JavaFX Script adds an action listener with a reference to the user-defined action attribute.

All JavaFX components that receive user input extend from ActionWidget, which has an attribute action registered as a function. If the action attribute is defined, it is automatically registered as a callback function. Similarly TextField and TextArea are defined and implemented.

Layout Managers
All the layout managers from Swing are available in JavaFX Script, but you refer them with a slightly different naming convention. The Layout portion of the layout manager name is replaced with Panel. For example:

  • FlowPanel corresponds to FlowLayout
  • GridPanel corresponds to GridLayout

The functionality remains the same, however. For example:

  • FlowPanel arranges the components in a flow honoring the width and height of the widgets.
  • BorderPanel provides the entire space for the widgets placed inside them without honoring the width and height of the contained widgets.
  • GridbagPanel provides all the attributes to control the layout and dynamic behavior of the components.

Figure 1 shows the use of the BorderPanel, FlowPanel, GridPanel, and GridbagPanel layouts. Each layout retains all the properties from its Java counterpart.

Click to enlarge

Figure 1. Layout Managers in Use

You also can add components to the container by placing them within brackets ([ ]) separated by commas.

What’s Next?
While not much JavaFX Script documentation is available currently, you can get a head start on the language by downloading the script files inside accompanying source code. Once you get the hang of it, you may have second thoughts about ever using Java Swing again. Why would you when JavaFX Script enables you to build highly responsive Internet and desktop applications so much more easily?

devx-admin

devx-admin

Share the Post:
Software Development

Top Software Development Companies

Looking for the best in software development? Our list of Top Software Development Companies is your gateway to finding the right tech partner. Dive in

India Web Development

Top Web Development Companies in India

In the digital race, the right web development partner is your winning edge. Dive into our curated list of top web development companies in India,

USA Web Development

Top Web Development Companies in USA

Looking for the best web development companies in the USA? We’ve got you covered! Check out our top 10 picks to find the right partner

Clean Energy Adoption

Inside Michigan’s Clean Energy Revolution

Democratic state legislators in Michigan continue to discuss and debate clean energy legislation in the hopes of establishing a comprehensive clean energy strategy for the

Chips Act Revolution

European Chips Act: What is it?

In response to the intensifying worldwide technology competition, Europe has unveiled the long-awaited European Chips Act. This daring legislative proposal aims to fortify Europe’s semiconductor

Revolutionized Low-Code

You Should Use Low-Code Platforms for Apps

As the demand for rapid software development increases, low-code platforms have emerged as a popular choice among developers for their ability to build applications with

Software Development

Top Software Development Companies

Looking for the best in software development? Our list of Top Software Development Companies is your gateway to finding the right tech partner. Dive in and explore the leaders in

India Web Development

Top Web Development Companies in India

In the digital race, the right web development partner is your winning edge. Dive into our curated list of top web development companies in India, and kickstart your journey to

USA Web Development

Top Web Development Companies in USA

Looking for the best web development companies in the USA? We’ve got you covered! Check out our top 10 picks to find the right partner for your online project. Your

Clean Energy Adoption

Inside Michigan’s Clean Energy Revolution

Democratic state legislators in Michigan continue to discuss and debate clean energy legislation in the hopes of establishing a comprehensive clean energy strategy for the state. A Senate committee meeting

Chips Act Revolution

European Chips Act: What is it?

In response to the intensifying worldwide technology competition, Europe has unveiled the long-awaited European Chips Act. This daring legislative proposal aims to fortify Europe’s semiconductor supply chain and enhance its

Revolutionized Low-Code

You Should Use Low-Code Platforms for Apps

As the demand for rapid software development increases, low-code platforms have emerged as a popular choice among developers for their ability to build applications with minimal coding. These platforms not

Cybersecurity Strategy

Five Powerful Strategies to Bolster Your Cybersecurity

In today’s increasingly digital landscape, businesses of all sizes must prioritize cyber security measures to defend against potential dangers. Cyber security professionals suggest five simple technological strategies to help companies

Global Layoffs

Tech Layoffs Are Getting Worse Globally

Since the start of 2023, the global technology sector has experienced a significant rise in layoffs, with over 236,000 workers being let go by 1,019 tech firms, as per data

Huawei Electric Dazzle

Huawei Dazzles with Electric Vehicles and Wireless Earbuds

During a prominent unveiling event, Huawei, the Chinese telecommunications powerhouse, kept quiet about its enigmatic new 5G phone and alleged cutting-edge chip development. Instead, Huawei astounded the audience by presenting

Cybersecurity Banking Revolution

Digital Banking Needs Cybersecurity

The banking, financial, and insurance (BFSI) sectors are pioneers in digital transformation, using web applications and application programming interfaces (APIs) to provide seamless services to customers around the world. Rising

FinTech Leadership

Terry Clune’s Fintech Empire

Over the past 30 years, Terry Clune has built a remarkable business empire, with CluneTech at the helm. The CEO and Founder has successfully created eight fintech firms, attracting renowned

The Role Of AI Within A Web Design Agency?

In the digital age, the role of Artificial Intelligence (AI) in web design is rapidly evolving, transitioning from a futuristic concept to practical tools used in design, coding, content writing

Generative AI Revolution

Is Generative AI the Next Internet?

The increasing demand for Generative AI models has led to a surge in its adoption across diverse sectors, with healthcare, automotive, and financial services being among the top beneficiaries. These

Microsoft Laptop

The New Surface Laptop Studio 2 Is Nuts

The Surface Laptop Studio 2 is a dynamic and robust all-in-one laptop designed for creators and professionals alike. It features a 14.4″ touchscreen and a cutting-edge design that is over

5G Innovations

GPU-Accelerated 5G in Japan

NTT DOCOMO, a global telecommunications giant, is set to break new ground in the industry as it prepares to launch a GPU-accelerated 5G network in Japan. This innovative approach will

AI Ethics

AI Journalism: Balancing Integrity and Innovation

An op-ed, produced using Microsoft’s Bing Chat AI software, recently appeared in the St. Louis Post-Dispatch, discussing the potential concerns surrounding the employment of artificial intelligence (AI) in journalism. These

Savings Extravaganza

Big Deal Days Extravaganza

The highly awaited Big Deal Days event for October 2023 is nearly here, scheduled for the 10th and 11th. Similar to the previous year, this autumn sale has already created

Cisco Splunk Deal

Cisco Splunk Deal Sparks Tech Acquisition Frenzy

Cisco’s recent massive purchase of Splunk, an AI-powered cybersecurity firm, for $28 billion signals a potential boost in tech deals after a year of subdued mergers and acquisitions in the

Iran Drone Expansion

Iran’s Jet-Propelled Drone Reshapes Power Balance

Iran has recently unveiled a jet-propelled variant of its Shahed series drone, marking a significant advancement in the nation’s drone technology. The new drone is poised to reshape the regional

Solar Geoengineering

Did the Overshoot Commission Shoot Down Geoengineering?

The Overshoot Commission has recently released a comprehensive report that discusses the controversial topic of Solar Geoengineering, also known as Solar Radiation Modification (SRM). The Commission’s primary objective is to

Remote Learning

Revolutionizing Remote Learning for Success

School districts are preparing to reveal a substantial technological upgrade designed to significantly improve remote learning experiences for both educators and students amid the ongoing pandemic. This major investment, which

Revolutionary SABERS Transforming

SABERS Batteries Transforming Industries

Scientists John Connell and Yi Lin from NASA’s Solid-state Architecture Batteries for Enhanced Rechargeability and Safety (SABERS) project are working on experimental solid-state battery packs that could dramatically change the

Build a Website

How Much Does It Cost to Build a Website?

Are you wondering how much it costs to build a website? The approximated cost is based on several factors, including which add-ons and platforms you choose. For example, a self-hosted

Battery Investments

Battery Startups Attract Billion-Dollar Investments

In recent times, battery startups have experienced a significant boost in investments, with three businesses obtaining over $1 billion in funding within the last month. French company Verkor amassed $2.1