Converter.java



import java.awt.*;
import java.awt.event.*;
 
/** 10進数と16進数の変換を行い表示するクラス */
 
public class Converter extends Panel {

   /** テキストフィールドのオブジェクト(10進法表示用) */

     public TextField decimalField;
 
   /** テキストフィールドのオブジェクト(16進法表示用) */

     public TextField hexField;
 
   /** アダプタのオブジェクト */

     protected ConvertAdapter convertAdapter;
 
   /** 内部に記憶される数値 */

     private int value;
 
   /** コンストラクタ */

     public Converter(){

          super();  // Panelの生成

          value = 0;
          decimalField = new TextField( "0", 3 );
          hexField = new TextField( "0", 2 );
          add( decimalField );
          add( hexField );

          convertAdapter = new ConvertAdapter( this );
          decimalField.addActionListener( convertAdapter );
          hexField.addActionListener( convertAdapter );
     }

   /** 外部から数値の情報を取り出すためのメソッド */

     public int getValue() {

          return value;
     }
 
   /** 外部から数値を再設定するためのメソッド */

     public void setValue( int value ) {

          this.value = value;
          setValue10( value );
          setValue16( value );
     }
 
   /** TextFieldから数値の情報を取り出すためのメソッド */

     protected int getValue10() {

          try{
              value = Integer.parseInt( decimalField.getText() );
          }
          catch( Exception e ){

              setValue( value ); // 以前の値に戻す
          }
          return value;
     }
 
     protected int getValue16() {

          try{
              value = Integer.parseInt( hexField.getText(), 16 );
          }
          catch( Exception e ){

              setValue( value ); // 以前の値に戻す
          }
          return value;
     }
 
   /** TextFieldに数値のテキストを設定するためのメソッド */

     protected void setValue10( int value ) {

          decimalField.setText( Integer.toString( value ) );
     }
 
     protected void setValue16( int value ) {

          hexField.setText( Integer.toHexString( value ) );
     }
 
   /** ActionListenerの登録を追加するためのメソッド */

     public void addActionListener( ActionListener listener ) {

          decimalField.addActionListener( listener );
          hexField.addActionListener( listener );
     }
 
   /** ActionListenerの登録を削除するためのメソッド */

     public void removeActionListener( ActionListener listener ) {

          decimalField.removeActionListener( listener );
          hexField.removeActionListener( listener );
     }
 
   /** TextListenerの登録を追加するためのメソッド */

     public void addTextListener( TextListener listener ) {

          decimalField.addTextListener( listener );
          hexField.addTextListener( listener );
     }
 
   /** TextListenerの登録を削除するためのメソッド */

     public void removeTextListener( TextListener listener ) {

          decimalField.removeTextListener( listener );
          hexField.removeTextListener( listener );
     }
 
   /** 単独で起動した時に呼び出されるメソッド */
 
     public static void main( String argv[] ) {
 
          Converter converter = new Converter();

          ExitableFrame frame = new ExitableFrame("Converter");
          frame.add( converter, "Center" );
          frame.pack();
          frame.show();
      }
 
   /** テキストフィールドのアクションを処理する innerクラス */
 
      class ConvertAdapter implements ActionListener {
 
         /** 操作する Converterオブジェクト */
 
            public Converter converter;
 
         /** コンストラクタ */
 
            ConvertAdapter( Converter converter ){
 
                 this.converter = converter;
            }
 
         /** アクション処理のメソッド */
 
            public void actionPerformed( ActionEvent evt ) {

                 TextField source = (TextField)evt.getSource();

                 if( source == converter.decimalField ) {

                     int value = converter.getValue10();
                     converter.setValue( value );
                  }
                  else if( source == converter.hexField ) {

                     int value = converter.getValue16();
                     converter.setValue( value );
                 }
            }
      } // ConvertAdapterクラスの定義の終わり
} // Converterクラスの定義の終わり