Skip to main content

New Article: Highly Flexible and Easy-to-Develop Swing Reporting

Posted by editor on March 23, 2010 at 5:47 AM PDT

Early in my software engineering career, I had several consulting positions working for fairly large companies where much of the work involved writing code to generate structured reports, or modifying existing software to customize reports that came with software the company had purchased or developed on their own. For large companies especially, back then (in the early 1980s), reports were a critical means for gaining insight into what was happening in the company with respect to orders, production, etc. Both overview looks and detailed views were needed.

While I did less of that kind of work as time went on (switching to more purely scientific development), I did enough of it to see the evolution that brought more formal report generation tools into the market. These permitted generation of customized reports with much less effort from a software engineering team, sometimes enabling business analysts develop their own reports without intervention from developers.

Still, data changes. And, the amount of data available to companies has enormously expanded. In a sense, this means that reporting tools are always playing catch up, since the more and varied types of data that is available to business managers, the more the reporting tools from the past become inadequate to the task.

In our latest java.net article, author Malcolm Davis addresses the problem of reporting from Swing. Malcolm's article, Flexible Swing Reporting Using JIDE Aggregate and Pivot Tables, demonstrates a highly effective Swing report generation technique that "provides 90% of the solution with 10% of the effort." As Malcolm says, the reporting problems I was aware of from my own past experience still exist today, in Swing:

Most classical report writers don't fit well in Swing. Reporting solutions can be adapted to Swing, but the adaptation is time consuming to implement, and often provides a less than desirable solution.

Whereas the report generation work I did typically involved going deep into large code bases, today software components are available that do a lot of the "heavy lifting" of interfacing with data stores and exposing the data in a format suitable for report generation. JIDE's Aggregate and Pivot tables are an example. In Malcolm's article, he shows how these components can be applied to generate a reporting solution where the data views are highly customizable by the end user.

Malcolm provides the design for his reporting tool and walks through the construction and capabilities of a demo app that illustrates the views that are available using the Aggregate and Pivot table components, including the ability to:

  • display or hide columns
  • group data
  • generate subtotals and grand totals
  • add formulas
  • export to Excel
  • save and restore user layout changes
  • switch between detail and summary views

While a lot of power is provided, Malcolm notes that "JIDE is no panacea for reporting." Malcolm's method provides a quick way to get a flexible grid view of a data set. But if your users need more complex, two-pass, aggregated information (for example, running totals, or balances), then your needs are beyond what the simple solution can provide. Hence, Malcolm's statement that his JTable reporting alternative "provides 90% of the solution." The key is that it does this "with 10% of the effort" in those cases where a single-pass, highly-flexible grid view is sufficient.

Read Flexible Swing Reporting Using JIDE Aggregate and Pivot Tables for all the details.


In Java Today, Adam Bien writes that the Future of Enterprise Java ... Is Clear (Java EE with/without Spring and Vice Versa):

Java EE 6 and Spring 3 became very similar - at least the resulting architecture and even design will differ only in details (see also Juergen Hoeller comment). I don't expect differences in development lifecycle either - e.g. Glassfish deployment (changing a JPA entity or a Session Bean) takes only a few hundred milliseconds - but you could achieve the same easily with Spring as well (there is no reason, why not)...

The Hudson team announced Hudson 1.352 Released:

After an exciting week that saw the rushed release of Hudson 1.351 on Monday following a fairly serious regression, Hudson 1.352 was released mid-Friday with a good mix bug fixes and enhancements. Bundled with this release was another localizations drop including translations for ca, es, fi, fr, hi_IN, it, nl, ru, and sv_SE locales. In addition to the nice fancy new community contributed translations, which you can help with by installing the Translation Assistance plugin, the 1.352 release includes the subtle enhancement of hyperlinking URLs in the console output...

At EclipseCon 2010, Sonatype announced Maven Studio for Eclipse:

Sonatype, caretaker of the Maven project and leading provider of enterprise software development infrastructure, today announced Sonatype Maven Studio for Eclipse. The Studio is the only Eclipse Integrated Development Environment specifically optimized for Maven, the de facto standard for Java project and build management used by more than 3 million Java developers worldwide. The Studio accelerates developer productivity through a range of innovations including one-click onboarding...


In the Weblogs, Fabrizio Giudici notes that Oracle officially asked Sonatype to back Java.Net:

About one month ago I was reviewing the Sonatype Free Maven Repository Hosting for FLOSS projects. I was pretty positive about that, being my conclusion: So, if I were Oracle, I wouldn't spend time and efforts to create specific Maven support at Kenai (that will be the new Java.Net) - using Sonatype's facilities seems to me the best way to rationalize resources across the Java Community. A few days later, Sonatype announced a plan to provide explicitly hosting for Java.Net projects - and now Mitchell Pronschinske just reported that Oracle is officially backing the plan...

Sahoo talks about GlassFish at enterprise OSGi face2face event - Meeting with OSGi Experts:

Although I had interacted with a number of active members of OSGi [1] expert group, last week I had the opportunity to meet some of these experts at an OSGi Enterprise Expert Group face2face event held at LinkedIn's Mountain View office. This is also the first time I met Richard S. Hall, the Felix guy (don't confuse with a very active Felix [2] committer by name Felix Meschberger). Richard has been involved in modularisation efforts for last decade or so. GlassFish team owes him and the Felix community a lot. Although Richard later on became part of Sun GlassFish team, we continue to engage with Felix community in the open forum...

Jan Haderka asks Do you execute ops in bulks or one by one?:

Last bunch of the entries have been all about the code. Today let's try something different. Partly because at the time of writing I'm just 34 thousand feet above Atlantic and really don't feel like coding anything, but partly also because i have been thinking about the problem I'm going to describe for while already. I'm sure most of you have seen similar issue in the past as well or are fighting one such right now. So please don't be put out by the fact I describe it using Magnolia as an example because it exists in multiple other apps too...


In the Forums, daggerredline has questions regarding Metro 1.5 client side inheritance: It appears that subtyping is not being recognized by my Metro 1.5 client, which was working fine with the JAX-WS 2.1 RI. Here's the situation: I have a super class ClassA, and subclasses ClassB and ClassC. I have a web service...

In the LWUIT forum, skalabic asks Anybody else has problems with smooth scrolling on the BlackBerry Storm?: Hello, During vertical scroll of the form (that is using BoxLayout on Y-axis) on BlackBerry Storm (touch screen device), it seem to work very strange and jump from one position to another randomly, definitely not looking 'smooth'...

In the SwingLabs forum, stefanopilla needs to Draw Nodes and Links on JxMapViewer: Hi everybody, last year I've been a Google Summer of Code Student and I've partecipated for the realization of a mapping software that have the goal to map all nodes of a wireless mesh network. I've read all tutorial written by Joshua on...


Our Spotlight this week is GlassFish Podcast Episode #051 - Java Persistence 2.0 (JPA) by Linda DeMichiel:

This GlassFish Podcast episode includes Supporting slides along with a downloadable MP3. Suggested additional reference materials are Java Persistence 2.0 (JSR 317), the Java EE 6 Tutorial, and the GlassFish v3 documentation.


This week's java.net Poll lists several Java EE related statements, and asks Which Java EE statement do you agree with most? The poll will close on Friday.


Our latest Feature Article is Getting Started with Java and SQLite on Blackberry OS 5.0 by Java Champion Bruce Hopkins -- learn how to create applications that utilize SQLite on Blackberry OS 5.0. We're also featuring Dibyendu Roy's Rethinking Multi-Threaded Design Principles; in the emerging multicore/multiprocessor world, multi-threaded programming is critical, in my view. And in Has JDBC Kept up with Enterprise Requirements?, Jesse Davis invites us to look beyond Type 4 architecture to address the latest requirements of the enterprise Java ecosystem.


Current and upcoming Java Events:

Registered users can submit event listings for the java.net Events Page using our events submission form. All submissions go through an editorial review before being posted to the site.


Archives and Subscriptions: This blog is delivered weekdays as the Java Today RSS feed. Also, once this page is no longer featured as the front page of java.net it will be archived along with other past issues in the java.net Archive.

-- Kevin Farnham

O'Reilly Media
Twitter: @kevin_farnham