Based on the great report designer tool : ReportMill, JFXBuilder is the first Java rich interface designer. A « preview JFX » button transform the ReportMill shapes in the JavaFXPad with the corresponding JavaFX Script. It’s just a first version with bugs but the concept is interesting and the based tool have already prove his reliability.
Archive for the ‘Eclipse’ Category
Java on the RIA road
The JavaFX news have burned feed readers, Sun take place on the RIA market against Microsoft and Adobe and it’s a good thing. F3 (i talkin’ about before) which is the base of JavaFX Script is a very great technology, and make easier the Swing productivity in terms of design. But don’t forget Java have always been a RIA plateform with Applet to create RWA applications. Apple understand this and migrated NeXT UI library since WebObjects 5.0. Java Web Start was arrive after making easier, like Web application, the deployment of RDA applications. Sun was in advance in this domain but Applet don’t find success and it’s the asset of Silverlight and Flex because they have GUI design tool (Expression Web, Flex Builder). Bob Brewin Sun CTO, tell us that this tool is a priority [Ed Burnette interview Q6] : JavaFX Designer.
I’m not agree with Simon Brocklehurst, I think that this tool and the designer/developer collaboration are essential, i’m not saying developers aren’t good designer, i think application conception with clean code is an art but design and development are different jobs.
The other difficulty is the JRE size, ~13 Mo where the others turns around 5 Mo, but it will be better.
Finally don’t forget mobile objectives (JavaFX Mobile), Java is really present in this domain and could make the difference.
Chris Oliver don’t choose XML for JavaFX Script unlike Microsoft with XAML. It’s true that JavaFX Script syntax is more intuitive and have advantages but we loose XML extension advantages (XInclude, XPath, XSLT). I was thinking Sun make more interest on JAXX, an XML UI language for Swing. But it’s a reality that JavaFX Script is an easier syntax for UI design.
What about SWT ? Bob Brewin say JavaFX Script could be extended for SWT [Ed Burnette interview Q5], and SWT is going to be compatible with WPF, could we have SWT UI generated with XAML ?
Don’t forget SWT is an UI library for RDA not RWA. The Silverlight, Flex and JavaFX Script objectives aren’t the same than Eclipse RCP, NetBeans RCP, Apollo and WPF. I notice that Silverlight use only 30% of WPF [5mn avec Kevin Gallo, Product Manager Silverlight par Didier Girard] where JavaFX Script can use all Java libraries.
What’s interesting thing is Eclipse is everywhere :
- Flex Builder is based on Eclipse
- Plugin JavaFX Script
- Eclipse on WPF
- Eclipse on Swing
When you choose Eclipse you’re sure make the good choice
.
To compare JavaFX Script and XAML the pad tool are interesting :
Fullscreen RCP application
Desktop or Web, which choice ? I asking the question. One of the features that makes the difference is the fullscreen mode. Under IE or Firefox a scroll bar stay on the left. In SWT it’s possible to have a real fullscreen mode and also force the window on top. Underneath you see the code to do that, all you have to do is simply set the style of the Shell to NO_TRIM to remove the border and the default header and ON_TOP to force the window on top of the others (actually i don’t know how i can do that in Web) :
<pre>
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setShellStyle(SWT.NO_TRIM | SWT.ON_TOP);
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Test FullScreen RCP");
}
@Override
public void createWindowContents(Shell shell) {
super.createWindowContents(shell);
shell.setMaximized(true);
}
}
</pre>
NetBeans and RAD
Roman Strobl presents a demo of the next version of NetBeans, the interesting thing is that we see the implementation of the JSR 296 Swing Application Framework and 295 Beans Binding. Nothing new because it’s an old fonctionnality in other GUI designer but this time it’s open-source and JSR based. Is developers waiting for this in Eclipse with a new plugin ? For me the Rapid Application Development features have to help developers not develop for us. I prefer the Eclipse approach begins with an XML language conception (XSWT) with JFace Data Binding integration and maybe Visual Editor which generate this XML and not code. Although Visual Editor generate the cleanest code, use of XML reduce the code and make it easy to maintain. Even more it separate the design work and the development, like Microsoft do with XAML in the heart of Expression Tools for the designer and Visual Studio for the developper or Adobe with MXML and FlexBuilder. NetBeans don’t forget this alternative and look around JAXX.
RAP and GWT
Like John O’Shea I’ll be not at EclipseCon and i rather be at RAP sessions. The GWT community is very large and continue to grow. Unfortunately others initiative like RAP haven’t the same community yet. I think the energy to develop new components by the community actually is interesting and could be more interesting if these components can be integrate in a AJAX RCP like environnement. What about an integration of GWT with RAP ? I think it’s not easy because of the choice of RWT/innopract but why not.
Rich Ajax Platform
RAP the new Eclipse project to develop RIA applications. Objective is to develop RIA applications like RCP applications, with a UI component library RWT based on SWT API and the javascript library qooxdoo. The project is in validation phase, but demos are visible (widget, workbench). A project in the same way tha GWT with an RCP approach.
Grid Eclipse Nebula Widget
The Eclipse Nebula sub-project present the Grid widget, an alpha version which works great, i use it in my application to administrate reservation of swimming course. The JFace layer is not implemented yet but it’s on rails. But I don’t know if a GridViewer will be very useful because the needs of a spreadsheet are very large.
This is an example of Grid with header of columns and rows, column grouping, expand/collapse event of group column. The objective is to show the schedules in columns and the week days in rows, each column is composed of 3 sub-columns showing the total capacity, the availability and the sold place. The total capacity column can be desactivated :
public Grid createGrid(Listin_schedules, Composite in_composite) { // Grid creation Grid l_grid = new Grid(in_composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); // show column header l_grid.setHeaderVisible(true); // show row header l_grid.setRowHeaderVisible(true); // enable cell selection l_grid.setCellSelectionEnabled(true); GC l_gc = new GC(l_grid); // list of swimming course schedules for (ScheduleType l_scheduleType : in_schedules) { // create column group with dynamic column (TOGGLE) GridColumnGroup l_scheduleColumn = new GridColumnGroup(l_grid, SWT.TOGGLE); // column group header name l_scheduleColumn.setText(l_scheduleType.getLabel()); final int l_colWidth = l_gc.stringExtent(l_scheduleType.getLabel() + " <<").x + 6; // initialize state (collapse) l_scheduleColumn.setExpanded(false); // listen expand event l_scheduleColumn.addListener(SWT.Expand, new Listener() { public void handleEvent(Event event) { int l_width = l_colWidth / 3; if (l_width < 20) { l_width = 20; } for (GridColumn l_column : ((GridColumnGroup) event.widget).getColumns()) { l_column.setWidth(l_width); } } }); // listen collapse event l_scheduleColumn.addListener(SWT.Collapse, new Listener() { public void handleEvent(Event event) { int l_width = l_colWidth / 2; if (l_width < 20) { l_width = 20; } for (GridColumn l_column : ((GridColumnGroup) event.widget).getColumns()) { if (l_column.isSummary()) { l_column.setWidth(l_width); } } } }); int l_width = l_colWidth / 2; if (l_width < 20) { l_width = 20; } // create columns group GridColumn l_capacity = new GridColumn(l_scheduleColumn, SWT.CENTER); l_capacity.setText("C"); l_capacity.setWidth(20); l_capacity.setCellSelectionEnabled(false); // collapsed ? no l_capacity.setSummary(false); l_capacity = new GridColumn(l_scheduleColumn, SWT.CENTER); l_capacity.setText("V"); l_capacity.setWidth(l_width); l_capacity.setCellSelectionEnabled(false); // collapsed ? yes l_capacity.setSummary(true); l_capacity = new GridColumn(l_scheduleColumn, SWT.CENTER); l_capacity.setText("L"); l_capacity.setWidth(l_width); l_capacity.setSummary(true); l_capacity.setData(l_scheduleType); } l_gc.dispose(); //l_grid.pack(true); return l_grid; }
The Grid binding is realise via the GridItem object
// GridItem creation l_gridItem = new GridItem(l_grid, SWT.CENTER); // row header name l_gridItem.setHeaderText(l_headerText); // set value by index column l_gridItem.setText(, );
It possible to merge cell of a same line e.g.:
e.g.:
l_gridItem.setColumnSpan(0, in_grid.getColumnCount());
And to get the selection :
Point[] l_selections = l_grid.getCellSelection();
for (Point l_selection : l_selections) {
// get GridItem
l_grid.getItem(l_selection.y);
// get GridColumn
l_grid.getColumn(l_selection.x)
}

Remote editing
A trick for remote file edition using RSE (Remote System Explorer) from DSDP (Device Software Development Platform Target Management) project.
UI Forms updates
UI Forms will update, Kim peter have posted screenshots in the bugReport. It should be impemented in the M5 and you can test soon in the org.eclipse.ui.forms.examples. The changes are :
- enhancement of the header (for Vista)
- drop down menu
- drag’n drop title
- tabs on top
- error messages in the header
Mylar : Eclipse Plugin
Mylar is a task management eclipse plugin, the Mylar’s advantage is to associate context on tasks. A statistic show that users spend 75% time navigating in their project, Mylar optimize this by filtering the navigator view on elements (class, methods, resources, …) link to the task. The navigator is dynamically update by investigating the bug. An other important advantage is the integration with bug tracker, actually only bugzilla, jira and trac have been integrated and a generic integration is in dev.
