Java, Eclipse and Web programming Tutorials

Eclipse Forms API - Tutorial

Lars Vogel

Version 0.2

25.06.2009

Revision History
Revision 0.103.05.2009Lars Vogel
Separated from http://www.vogella.de/articles/RichClientPlatform/article.html
Revision 0.225.06.2009Lars Vogel
Extended description.

Eclipse Forms API

This article describes how to build User Interfaces using Eclipse Forms.


Table of Contents

1. Eclipse Forms
1.1. Overview
1.2. Form / ScrolledForm
2. Example
3. Thank you
4. Questions and Discussion
5. Links and Literature
5.1. Source Code
5.2. Other Resources

1. Eclipse Forms

1.1. Overview

Eclipse supports a web-like user interface style, called Eclipse Forms. Eclipse Forms is an plugin based on SWT and JFace that provides the support for creating portable web-style user interfaces across all Eclipse UI categories.

The Eclipse forms functionality is contained in the plugin "org.eclipse.ui.forms".

The class FormToolkit serves as a factory for the creation of the required user interface elements. This factory adjust the look and and feel of the standard SWT and JFace elements to the Forms API.

Tip

Existing UI elements can be enhanced to the form API via the method adapt(Composite).

1.2. Form / ScrolledForm

FormToolkit provides Form or ScrollForm which are serves as the frame for the user interface elements. They provide a header, a toolbar and a body. The body can get accessed via getBody() and contains other ui elements.

2. Example

Create a new project "de.vogella.rcp.intro.forms" (see Eclipse RCP Tutorial for details). Use the "RCP Application with a view" as a template.

Add a dependency to "org.eclipse.ui.forms" in plugin.xml. You do this via selecting the tab "Dependencies". Press the "Add" button and type in the name of "org.eclipse.ui.forms".

Tip

Adding a dependency to an existing plug-in automatically updates the classpath of your project.

Change the View.java to the following. This will create a re-sizable table in a form with a button on the right side of it.

			
package de.vogella.rcp.intro.forms;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.part.ViewPart;

public class View extends ViewPart {
	public static final String ID = "de.vogella.rcp.intro.forms.view";

	private TableViewer viewer;

	class ViewContentProvider implements IStructuredContentProvider {
		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
		}

		public void dispose() {
		}

		public Object[] getElements(Object parent) {
			return new String[] { "One", "Two", "Three" };
		}
	}

	class ViewLabelProvider extends LabelProvider implements
			ITableLabelProvider {
		public String getColumnText(Object obj, int index) {
			return getText(obj);
		}

		public Image getColumnImage(Object obj, int index) {
			return getImage(obj);
		}

		public Image getImage(Object obj) {
			return PlatformUI.getWorkbench().getSharedImages().getImage(
					ISharedImages.IMG_OBJ_ELEMENT);
		}
	}

	/**
	 * This is a callback that will allow us to create the viewer and initialize
	 * it.
	 */
	public void createPartControl(Composite parent) {
		FormToolkit toolkit = new FormToolkit(parent.getDisplay());
		// Lets make a layout for the first section of the screen
		GridLayout layout = new GridLayout();
		layout.numColumns = 1;
		layout.marginWidth = 2;
		layout.marginHeight = 2;
		// Creating the Screen
		Section section = toolkit.createSection(parent, Section.DESCRIPTION
				| Section.TITLE_BAR);
		section.setText("Section 1 for demonstration"); //$NON-NLS-1$
		section.setDescription("This demonstrates the usage of section");
		// Composite for storing the data
		Composite client = toolkit.createComposite(section, SWT.WRAP);
		layout = new GridLayout();
		layout.numColumns = 2;
		layout.marginWidth = 2;
		layout.marginHeight = 2;
		client.setLayout(layout);
		Table t = toolkit.createTable(client, SWT.NULL);
		GridData gd = new GridData(GridData.FILL_BOTH);
		gd.heightHint = 20;
		gd.widthHint = 100;
		t.setLayoutData(gd);
		toolkit.paintBordersFor(client);
		Button b = toolkit.createButton(client, "Do something", SWT.PUSH); //$NON-NLS-1$
		gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
		b.setLayoutData(gd);
		section.setClient(client);
		viewer = new TableViewer(t);

		viewer.setContentProvider(new ViewContentProvider());
		viewer.setLabelProvider(new ViewLabelProvider());
		viewer.setInput(getViewSite());
	}

	/**
	 * Passing the focus request to the viewer's control.
	 */
	public void setFocus() {
		viewer.getControl().setFocus();
	}
}

		

The result should look like the following:

Tip

Please see the appendix for a detailed article of Eclipse Forms.

3. Thank you

Thank you for practicing with this tutorial.

Please note that I maintain this website in my private time. If you like the information I'm providing please help me by donating.

4. Questions and Discussion

For questions and discussion around this article please use the www.vogella.de Google Group. Also if you note an error in this article please post the error and if possible the correction to the Group.

I believe the following is a very good guideline for asking questions in general and also for the Google group How To Ask Questions The Smart Way.

5. Links and Literature

5.1. Source Code

http://www.vogella.de/code/codeeclipse.html Source Code of Examples

http://www.eclipse.org/articles/Article-Forms/article.html Article about Eclipse Forms