UFaceKit and Java5-Viewers

I had some time today to once more work a bit on UFaceKit and it’s viewer implementation and I think I added a feature which makes sense to show of.

I was working on the rewrite of an old application we wrote 3 years ago to use the Highlevel-Databinding-API I’m developing as part of the UFaceKit-Project. One of the common problems I had in my RCP-Application was that SWT-Combo-Widgets are not friendly if you have many entries because native keyboard selection is not supported on by default.

Inspired by a proposed component for JFace I wrote such a Viewer-Implementation from scratch which can be used like this:

  * @param args
public static void main(String[] args) {
  final Display d = new Display();
  Shell shell = new Shell(d);
  shell.setLayout(new GridLayout());
  Text text = new Text(shell,SWT.BORDER);
  text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  final Collection<Person> persons = new ArrayList<Person>();
  persons.add(new Person(1, "Tom"));
  persons.add(new Person(2, "Udo"));
  persons.add(new Person(3, "Bernd"));
  persons.add(new Person(4, "Tom"));
  persons.add(new Person(5, "Thomas"));
  final ProposalViewer<Person, Collection<Person>> viewer = 
    new ProposalViewer<Person, Collection<Person>>(text);

  viewer.setLabelConverter(new LabelConverter<Person>() {
    public String getText(Person element) {
      return element.name + " ( ID-"+element.id+")";
    new CollectionContentProvider<Person>()
    new ISelectionChangedListener<Person>() {
      public void selectionChanged(
        SelectionChangedEvent<Person> event) {
          if( event.getSelection().isEmpty() ) {
          } else {
            for( Person p : event.getSelection() ) {

  Button b = new Button(shell,SWT.PUSH);
  b.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        new StructuredSelection<Person>(

  while( ! shell.isDisposed() ) {
    if( ! d.readAndDispatch() ) {

There are some interesting things to notice about the Viewers and their implementation:

  • Java5 Language Features like Generics, for-loop above Selection
  • A generic interface definition making it widget-toolkit agnostic (I’ve already implemented some Swing, Qt, SWT, GWT, SmartGWT-Viewers)
  • Automatic Databinding support because it works on the Interface-Definition

How nice this new SWT-Proposal-Viewer integrates itself into my application take a look at this small screencast:

and for the readers of blog aggregators here as an image Screenshot

This entry was posted in UFaceKit. Bookmark the permalink.

3 Responses to UFaceKit and Java5-Viewers

  1. Markus says:

    Hi Tom,
    this looks very nice!
    Is there a place I can download this viewer?

  2. Mark Crocker says:

    This reminds me of the NakedObjects Framework, where you define business objects and add a few annotations to indicate properties and actions and the framework automatically makes the objects available for the users to manipulate. See http://www.nakedobjects.org/home/no_for_java_intro.shtml

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.