|
|
|
Advertisement
|
TimeService interface is equally as simple:
public class TimeServiceImpl extends java.lang.Object
implements TimeService{
public TimeServiceImpl() {
//Nothing to do here
}
public java.util.Date getTime() {
return new Date();
}
...
Since that object needs no resources, there is nothing to do in a constructor. Our single method inherited from the TimeService interface instantiates and returns a new Date object, which is initialized by default to the current system time.
Now we'll get into the code for the user interface. While I will typically define more complex user interfaces as distinct classes, I've chosen to implement the UI as a static inner class.
The code below declares a new class, TimeJFrame, which extends javax.swing.JFrame and implements java.awt.event.ActionListener. The constructor takes a net.jini.core.lookup.ServiceItem as the sole parameter. From the ServiceItem, we extract the service proxy and store it as an instance variable. The constructor also creates two Swing components, a JButton and a JLabel, and adds them to its content pane. The class registers itself to receive events from the button, so that we may respond and update the UI with the current time from the service:
protected static class TimeJFrame extends JFrame implements ActionListener{
protected TimeService jini_Time_Service;
protected JLabel comp_Time_Label;
protected JButton comp_Time_Button;
protected SimpleDateFormat util_Date_Format;
public TimeJFrame(ServiceItem item){
super("Time Service UI");
jini_Time_Service=(TimeService)item.service;
util_Date_Format = new SimpleDateFormat();
comp_Time_Button = new JButton("Update Time");
comp_Time_Button.addActionListener(this);
comp_Time_Label = new JLabel();
comp_Time_Label.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Time is:"));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(comp_Time_Label,BorderLayout.CENTER);
getContentPane().add(comp_Time_Button,BorderLayout.SOUTH);
pack();
setSize(250,250);
}
public void actionPerformed(ActionEvent evt){
try{
Date d = jini_Time_Service.getTime();
comp_Time_Label.setText(util_Date_Format.format(d));
}catch(RemoteException e){
e.printStackTrace();
}
}
}
The view of a TimeJFrame when launched

from the JiniTaskBar
The actionPerformed() method responds to button clicks by retrieving the current time from the service and updating the UI with a formatted text string representing the time. Since we declared the getTime() method in TimeService to throw an exception, we have enclosed the code within a try-catch block. We should take action to tell the user that an exception has occurred, but for now we will simply print out the stack trace. Since our implementation is not a remote object, the exception should never be thrown, but we need to take caution in case the implementation changes.
|
Sponsored Links
|