Getting Further with Spring RCP

Creating a Table

Let's now display our data in a table.

First, we create the table, using the Spring RCP "AbstractObjectTable" class. This is a convenience class provided by Spring RCP, with some handy methods for setting up our table in an intuitive manner, providing a simple layer between our domain and our view.

Then we add the related messages to the messages.properties file.

And, finally, we add the table to the CustomerView.

So, let's start by creating a new class called "CustomerTable", with this content:

package simple;

import javax.swing.JTable;
import javax.swing.table.TableColumnModel;

import domain.CustomerDataStore;
import org.springframework.richclient.table.support.AbstractObjectTable;

public class CustomerTable extends AbstractObjectTable {

private CustomerDataStore dataStore;

public CustomerTable(CustomerDataStore dataStore) {
super("customers", new String[]{
"lastName",
"firstName",
"address.street",
"address.city",
"address.state",
"address.zip"});
this.dataStore = dataStore;
}

@Override
protected void configureTable(JTable table) {
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(0).setPreferredWidth(100);
tcm.getColumn(1).setPreferredWidth(100);
tcm.getColumn(2).setPreferredWidth(200);
tcm.getColumn(3).setPreferredWidth(50);
tcm.getColumn(4).setPreferredWidth(10);
tcm.getColumn(5).setPreferredWidth(50);
}

@Override
protected Object[] getDefaultInitialData() {
return dataStore.getAllCustomers();
}

}

 

Next, add the strings referred to above to the messages.properties file, with values that will be displayed as the labels of the columns in the table:

firstName.label=First Name
lastName.label=Last Name
address.street.label=Street
address.city.label=City
address.state.label=State
address.zip.label=Zip

 

And then we display the table in our CustomerView, the same CustomerView that we had at the end of the 2nd part of "Getting Started with Spring RCP". We first need a getter and a setter for the data store that we registered in the richclient-application-context.xml and then we need to override AbstractView.createControl() to return a JComponent that consists of our AbstractObjectTable within a JPanel:

package simple;

import domain.CustomerDataStore;
import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import org.springframework.richclient.application.support.AbstractView;

public class CustomerView extends AbstractView {

private CustomerDataStore customerDataStore;
private CustomerTable customerTable;

protected CustomerDataStore getCustomerDataStore() {
return customerDataStore;
}

public void setCustomerDataStore(CustomerDataStore customerDataStore) {
this.customerDataStore = customerDataStore;
}

@Override
protected JComponent createControl() {

customerTable = new customerTableFactory().createCustomerTable();
JPanel view = new JPanel(new BorderLayout());
JScrollPane sp = getComponentFactory().createScrollPane(customerTable.getControl());
view.add(sp, BorderLayout.CENTER);
return view;

}

private class customerTableFactory {

public CustomerTable createCustomerTable() {

CustomerTable customerTable = new CustomerTable(customerDataStore);
return customerTable;

}

}

}

 

Now deployment will result in our table being displayed in the CustomerView:

 

 

AttachmentSize
figure-1.png44.04 KB
figure-1-src.png35.16 KB
figure-2-src.png41.8 KB
figure-3-src.png50.43 KB
figure-4-src.png44.05 KB
figure-5-src.png44.83 KB
figure-6-src.png41.06 KB
0

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Matthew Schmidt replied on Thu, 2008/07/03 - 3:25pm

Awesome article.  I love to see Java Swing apps get easier to build.  Spring RCP has been a long time coming, and I'm glad to see it finally starting to turn into something useful.

Jonny Wray replied on Thu, 2008/07/03 - 11:02pm

Great article and introduction to Spring RCP. I just wanted to comment that while version 1.0 has only recently been released the code has been useful for a lot longer. Personally, I have a couple of internal applications at work based on the framework, one of which is about three years old.

As an example of a full application, albeit quite simple, people might be interested in Bio Browser, a program to search and browse instances of a domain model from the National Cancer Institute exposed via their web services. The project page, with a web start launch is http://www.assembla.com/wiki/show/biobrowser. There is a child page on the wiki, instructions, which gives basic instructions and screenshots.

Jonny 

 

Peter Karich replied on Fri, 2008/07/04 - 4:29pm

Thanks a lot! "Forms" was the next task for me, so you saved me a lot of hours :-)

Some more pointers that I have found for this topic (or quite similar):

I even found a full open source app (I didn't try it):

http://pegadi.underdusken.no/browser/trunk

ge0ffrey replied on Sun, 2008/07/06 - 9:21am

I've added links to these articles in svn revision 2051, so they will be published on the next publish of the official spring-richclient website (which contains links to all available documentation):

http://spring-rich-c.sourceforge.net/

Geertjan Wielenga replied on Sun, 2008/07/06 - 9:57am in response to: ge0ffrey

[quote=ge0ffrey]

I've added links to these articles in svn revision 2051, so they will be published on the next publish of the official spring-richclient website (which contains links to all available documentation):

http://spring-rich-c.sourceforge.net/

[/quote]

 

Great to hear! And there are more parts to this series that I am currently working on and that will be published over the coming weeks.

doclolieven replied on Mon, 2008/07/07 - 2:18am

I've also written a article on how to write a custom binder:  http://www.doclo.be/lieven/articles/creatingbinderrcp.html

Geertjan Wielenga replied on Mon, 2008/07/07 - 3:11am

Thanks all, Matt, Jonny, Peter, doclolieven, for the comments and support! doclolieven, I will look at that and try it out. Jonny, can you give me some sample data that I can fill into your application so that I can see some results? Peter, I will investigate those links, thanks a lot for them.

Jonny Wray replied on Mon, 2008/07/07 - 10:39am in response to: geertjan

Geertjan,

Not a problem, hope you find it useful. The 'instructions' page on the wiki has an example of running a query and then browsing through the results, including viewing pathway diagrams.

Short version, choose Gene from the search menu and enter say, EPO, in the 'Gene Symbol' field. That'll produce a navigable tree in the tree view. Double clicking on entities with a green arrow icon will then fetch those back. Right click on a pathway entity will bring up a context sensitive menu allow diagram to be displayed.

 Hope that's enough to get you going 

Jonny 

 

 

Geertjan Wielenga replied on Mon, 2008/07/07 - 11:30am

Hi Lieven Doclo, I tried that code for the custom binder and it works perfectly. Thanks for the interesting example.

Gregg Bolinger replied on Mon, 2008/08/11 - 12:49am

Great series!  Any chance an IntelliJ plugin is in the works?  I realize there is a lot of useful context completion availabe currently but it would be nice to have things like view/form/etc beans automatically added to the context file on creation rather than having to do it manually.

clermont38 replied on Fri, 2008/08/15 - 9:25am in response to: geertjan

Great series! should turn it to a book.

Would appreciate some  help with the following problem pleae :

 In the PropertiesExecutor class I am Importing the following Jars

import org.springframework.richclient.command.support.AbstractActionCommandExecutor;
import org.springframework.richclient.dialog.CloseAction;
import org.springframework.richclient.dialog.CompositeDialogPage;
import org.springframework.richclient.dialog.TabbedDialogPage;
import org.springframework.richclient.dialog.TitledPageApplicationDialog;

However I am unable to resolve getWindowControl()

Would you know what I am lacking.

Thanks a lot 

japan_733 replied on Thu, 2009/07/16 - 5:44am

Hi,

I'm new to Spring RCP and I'm trying some demo projects to know more about it. But I want to know that how to build a single executable JAR file for the Spring RCP project. I have tried to execute the test JAR file that is been created in the dist folder of the Net Beans RCP project but it didn't run properly it only shows me the splash screen and then the program ends. Please help me out in this matter.

One more thing I want to know is can we integrate a Spring RCP developed in Net Beans with an applet. Because I need to develop one application in RCP but that needs to be run as a client side applet. Or you can show me some other way.

I regularly refers your tutorial on Spring RCP for NetBeans. And it helps me a lot.

Thanks in advance.

Japan Trivedi,
japan_733@yahoo.co.in

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.