DictionaryClient.java



/** RMIの機構でリモートのオブジェクトを利用するクライアント */
import java.rmi.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class DictionaryClient extends JPanel {

 /** 分散オブジェクトRemoteDictionary */
    public RemoteDictionary dictionary;

 /** キーの一覧を表示する JListのオブジェクト */
    public JList list;

 /** データを表示するJTextAreaのオブジェクト */
    public JTextArea area;

 /** コンストラクタ */
    public DictionaryClient( String serverName ) throws Exception {
        super();
        try {
            dictionary
              = (RemoteDictionary)Naming.lookup( serverName );
            Object[] data = dictionary.keys();
            list = new JList( data );
            list.setVisibleRowCount( 8 );
            JScrollPane spane = new JScrollPane( list );
            add( spane );
            area = new JTextArea( 16, 32 );
            area.setEditable( false );
            add( area );
            SelectionAdapter adapter = new SelectionAdapter();
            list.addListSelectionListener( adapter );
        }
        catch( Exception e ) {
            throw e;
        }
    }

 /** 起動時に呼び出されるメソッド */
    public static void main( String argv[] ) {
        try {
            String serverName
              = "rmi://" + argv[0] + "/" + "RemoteDictionaryServer";
            DictionaryClient client
              = new DictionaryClient( serverName );
            JFrame frame = new JFrame( "Dictionary Client" );
            frame.getContentPane().setLayout( new BorderLayout() );
            frame.getContentPane().add( client, "Center" );
            frame.pack();
            frame.show();
        }
        catch( Exception e ) {
            System.err.println( "Error:" + e.getMessage() );
            System.exit(-1);
        }
    }

 /** イベント処理のアダプタのクラス */
    class SelectionAdapter implements ListSelectionListener {

        public void valueChanged( ListSelectionEvent evet ) {
            try {
                Object key = list.getSelectedValue();
                Object value = dictionary.answer( key );
                area.setText( value.toString() );
            }
            catch( Exception e ) {
                area.setText( "Error:" + e.getMessage() );
            }
        }
    }
}