単位の換算

便利なツール

円からドルへ、フィートからセンチメートルへ、華氏温度から摂氏温度へと世の中には単位の換算などで同じ計算を繰り返すことが多くあります。前回のCatText.javaに変更を加えてこのようなツールを作ります。

課題

ファイル名 KanSan.java

フィート(ft)からメートル(m)に単位を換算するツールを作ります。双方向で使えます。上部にフィートを入力して、[メートルへ]ボタンを押すと下部にメートルがでます。逆に下部にメートルを入力して[フィートへ]を押すと上部にフィートがでます。

フィート(ft)からメートル(m)へ変換するには0.3048をかけ,メートルからフィートへは0.3048で割ります。

基本方針と新規の学習事項

基本的にCatText.java,CatText2.javaを少し変えるだけです。

使っている部品は,次の5つです。

JTextField
JButtonJLabelJButton
JTextField

一点だけ新しいことを使っています。

これはJTextFieldにタイトル入りの枠線をつけたものです。たとえばmytext1をJTextFieldのインスタンスとして,次のように書きます。

mytext1.setBorder(BorderFactory.createTitledBorder("フィート"));

変更部分を順に説明

  1. import の部分はそのまま,javax.swing.*とjava.awt.*とjava.awt.event.*です,
  2. クラスの名前をKanSanにします。宣言部分はそのまま,extends JFrame と implements ActionListener をつけておきます。
  3. フィールドの部分には,上記の5つの部品を宣言しておきます。すなわちJTextField2つ,JButton2つ,JLabel1つです。適切なインスタンス名(変数名)をつけておきます。(以下の説明はJTextFieldのインスタンスに mytext1, mytext2 JButton に mybutton1, mybutton2 JLabel にmylabel という名前をつけたとしてしています)
  4. コンストラクタ名はクラス名と同じです。( )内はやはり空白です。
  5. 終了処理(setDefaultCloseOperation)を入れます。
  6. 5つの部品をnewで生成します。JTextFieldは幅を20桁程度にするために,JTextField(20)とすればよいでしょう。JButtonには"メートルへ","フィートへ"を書きます。mybutton1("メートルへ")のようにします。JLabelには"単位の換算"と入れ,センタリングのため JLabel.CENTER も使っています。mylabel("単位の換算",JLabel.CENTER)のようにします。
  7. JTextFieldにタイトル入りの枠線をつけます。たとえばmytext1をJTextFieldのインスタンスとして,次のように書きます。(インスタンス名がtext1ならmytext1はtext1に書き換えます)
    mytext1.setBorder(BorderFactory.createTitledBorder("フィート"));
    
    2めはもちろんメートルにします。
  8. JTextField内を右寄せにします。これはCatText2.javaでやったものです。
    mytext1.setHorizontalAlignment(JTextField.RIGHT);
    
  9. 5つの部品なのでBorderLayoutで配置できます。 CatText.javaはGridでしたが、BorderLayoutを使うことを指定します。
    setLayout(new BorderLayout());
    
  10. BorderLayoutを使うと、addするときに位置を指定しなければなりません。例えば、
    add(mytext1,BorderLayout.NORTH);
    
    選択肢は NORTH WEST CENTER EAST SOUTH のどれかです。
  11. JButtonのインスタンスにaddActionListenerを付けます。これはCatText.javaのときと同様ですが、ボタンが2つあるので1つ加えます。
  12. actionPerformed(ActionEvent e)の行はそのままです。
  13. フィートからメートルに変換するボタンに処理を書きます。たとえば、
    if (e.getSource() == mybutton1) {
    	double x;
    	x = Double.parseDouble(mytext1.getText());
    	mytext2.setText( Double.toString( x * 0.3048 ) );
    }
    
  14. 2つめのボタンの時の処理も書きます。
    else if (e.getSource() == mybutton2) {
    
    ではじめ、mytext1,mytext2を書き換えて、かけ算を割り算にします。
  15. メインの部分を書きます。CatText.javaなどでやったのと同じく、インスタンスを一つ作るだけで終わりです。クラス名がKanSanであることを忘れずに。

確認

動くかどうか確認します。

余裕があったら…

KanSan2.java

インチ(in)からセンチメートル(cm)へ変換  インチ(in)からセンチメートル(cm)へ変換するには2.54を乗算すればよい。

KanSan3.java

華氏(F)から摂氏(℃)へ変換。換算式は次の通り。

(華氏温度) = 1.8 * (摂氏温度) + 32

華氏温度は日本では全く使われないのですが、アメリカでは一般的な温度の単位で、日常会話で体温や気温を言うときにはこれを使います。旅行する人は知っておくとよいでしょう。Fで表します。(正しくは℃とおなじく°がつきます)、

もともとドイツのファーレンハイトという人が考えた単位で、氷に塩を混ぜて作られる0℃以下の低温を0F、人間の体温を100Fとしたのが始まりです。


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Feb.2009
Oct.2011